我想获取 Datomic 中特定字段的值历史记录。
我的直觉是用 (d/history)
喜欢
(d/q '[:find ?entity ?field-val ?date ?tx
:in $
:where
[?entity :namespace/field ?field-val ?tx]
[?tx :db/txInstant ?date]]
(d/history (db/get-db)))
但是,此查询将复制大多数值,因为它列出了每个撤回以及每个值更新(每个 db/add
和 db/retract
)。我想也许我可以用事务查询数据,然后检查操作。但我找不到查询数据的方法。
(d/pull db '[*] tx-id)
不包括数据。 我可以用
tx-range
,但这似乎不合理。有什么更好的方法吗?
最佳答案
我找错地方了。历史查询提供了 history docs 中描述的额外隐藏位置值。 .
所以任何 where 子句都可以包含 ?entity ?attribute ?value ?transaction ?operation
.
:db/add
和假 :db/retract
所以,我想要的查询看起来像
(d/q '[:find ?entity ?field-val ?date ?tx
:in $
:where
[?entity :namespace/field ?field-val ?tx true] ;;ADDED TRUE
[?tx :db/txInstant ?date]]
(d/history (db/get-db)))
关于clojure - 在 Datomic 中,在没有撤回的情况下查询字段历史记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68810613/