2012-06-14 8 views
12

Ich folge dem Tutorial, http://www.datomic.com/company/resources/tutorial, aber ich denke, ich vermisse ein einfaches Teil des Puzzles, wie Datomic das Zeitmodell zugreifen kann.Wie bekomme ich in Datomic eine Zeitleistenansicht der Änderungen an den Werten einer bestimmten Entität?

Wenn ich eine Reihe von Erweiterungen und zieht

;; DO a series of transactions 
;; (transact conn [:db/add entity-id attribute value0]) 

(use 'datomic.api) 
(dir datomic.api) 
(def conn (connect "datomic:dev://localhost:4334/demo")) 

(transact conn '[:db/add 2000 :db/doc "Hello There"]) 
(q '[:find ?e ?n :where [?e :db/doc ?n] [(= 2000 ?e)]] (db conn)) 
; => <HashSet [[2000 "Hello There"]]> 

(transact conn '[:db/add 2000 :db/doc "Hello There 1"]) 
(q '[:find ?e ?n :where [?e :db/doc ?n] [(= 2000 ?e)]] (db conn)) 
; => <HashSet [[2000 "Hello There 1"]]> 

(transact conn '[:db/add 2000 :db/doc "Hello There 2"]) 
(q '[:find ?e ?n :where [?e :db/doc ?n] [(= 2000 ?e)]] (db conn)) 
; => <HashSet [[2000 "Hello There 2"]]> 

(transact conn '[:db/add 2000 :db/doc "Hello There 3"]) 
(q '[:find ?e ?n :where [?e :db/doc ?n] [(= 2000 ?e)]] (db conn)) 
; => <HashSet [[2000 "Hello There 3"]]> 

Wie ist es möglich, eine Reihe von Änderungen des Wertes an zu erhalten (Einheit 2000 Attribute: db/doc)?

Ich möchte etwas im Format

[ [Transaction Number, Time, Value] .... [Transaction Number, Time, Value]] 

Zum Beispiel bekommen:

[ [T1, "2012-March-16-9:30:12", "Hello There"] 
    .... 
    .... 
    .... 
    [T27, "2012-June-14-9:54:38", "Hello There 3"] ] 

Es kann nicht so schwierig sein, aber es gibt eine Menge: db interne Parameter, die ich bin nicht vertraut mit.

Antwort

9

Werfen Sie einen Blick auf die (history db) Funktion in the reference.

Gibt eine spezielle Datenbank, die alle Behauptungen und Einziehungen über die Zeit enthält. Diese spezielle Datenbank kann für Daten- und Indexbereichsaufrufe und -Abfragen verwendet werden, jedoch nicht für Entität oder mit Aufrufen. Ab-und Seit-Grenzen werden ebenfalls unterstützt. Beachten Sie, dass Abfragen werden alle die Ergänzungen und Einziehungen erhalten, die durch die fünfte datom Feld unterscheiden: hinzugefügt (true für Add/assert) [eav tx hinzugefügt]

history Verwenden Sie etwas tun können wie dies die Daten erhalten, wollten Sie:

datomic-test.core> (q '[:find ?tx ?tx-time ?v 
         :in $ ?e ?a 
         :where [?e ?a ?v ?tx _] 
           [?tx :db/txInstant ?tx-time]] 
         (d/history (db conn)) 
         2000 
         :db/doc) 
#<HashSet [[13194139534315 #inst "2012-09-09T00:45:49.086-00:00" "Hello There"] [...]]> 

bei (tempid :db.part/user) schauen Sie auch IDs anstelle der Verwendung hart codierte Zahlen wie 2000 zu erhalten.

+0

cool ... wird ein Spiel mit diesem haben =) – zcaudate

Verwandte Themen