12

私はチュートリアルhttp://www.datomic.com/company/resources/tutorialをフォローしていますが、Datomicの時間モデルにアクセスする方法のパズルの簡単な部分が欠けていると思います。

一連の追加と撤回を行う場合

;; 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"]]>

(エンティティ2000属性:db / doc)の値の一連の変更を取得するにはどうすればよいですか?

次の形式で何かを取得したい

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

例えば:

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

それほど難しいことではありませんが、私がよく知らない:db内部パラメーターがたくさんあります。

4

1 に答える 1

9

リファレンス(history db)の関数を見てください。

時間の経過に伴うすべてのアサーションとリトラクトを含む特別なデータベースを返します。この特別なデータベースは、データとインデックス範囲の呼び出しとクエリに使用できますが、エンティティや呼び出しには使用できません。as-ofおよびsince境界もサポートされています。クエリはすべての追加と撤回を取得することに注意してください。これは、5番目のdatomフィールド:added(add / assertの場合はtrue)[eavtxadded]で区別できます。

を使用historyすると、次のようなことを実行して、必要なデータを取得できます。

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"] [...]]>

また、(tempid :db.part/user)のようなハードコードされた番号を使用する代わりに、IDを取得することも検討してください2000

于 2012-09-09T01:43:13.033 に答える