Clojure 在Datomic中,如何获取对特定实体的值所做更改的时间轴视图?
我正在学习教程,但我想我错过了一个简单的谜题,即如何访问Datomic的时间模型 如果我做了一系列的添加和收缩Clojure 在Datomic中,如何获取对特定实体的值所做更改的时间轴视图?,clojure,datomic,Clojure,Datomic,我正在学习教程,但我想我错过了一个简单的谜题,即如何访问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
;; 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"]]>
例如:
[ [T1, "2012-March-16-9:30:12", "Hello There"]
....
....
....
[T27, "2012-June-14-9:54:38", "Hello There 3"] ]
这可能没那么难,但是有很多:db内部参数我不熟悉。看看(历史数据库)
函数
返回一个特殊数据库,其中包含所有断言和
随着时间的推移而收缩。这个特殊的数据库可以用于
DATOM和索引范围调用和查询,但不适用于实体或
打电话。也支持as-of和since边界。注意
查询将获得所有的添加和收回,可以
由第五个datom字段区分:已添加(对于添加/断言为true)
[新增e a v tx]
使用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"] [...]]>
datomic test.core>(q'[:find?tx?tx time?v
:单位:百万美元
:其中[?e?a?v?tx]
[?tx:db/txInstant?tx时间]]
(d/历史记录(db conn))
2000
:db/doc)
#
还可以查看(tempid:db.part/user)
来获取ID,而不是使用像2000这样的硬编码数字
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"] [...]]>