Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 在Datomic中,如何获取对特定实体的值所做更改的时间轴视图?_Clojure_Datomic - Fatal编程技术网

Clojure 在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

我正在学习教程,但我想我错过了一个简单的谜题,即如何访问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"]]>
例如:

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