在 Datomic 中,查询没有撤回的字段历史记录?

In Datomic, querying field history with no retractions?

我想获取 Datomic 中特定字段值的历史记录。 我的直觉是使用 (d/history) like

(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/adddb/retract)。

我想也许我可以用交易查询数据,然后检查操作。但是我找不到查询数据的方法。

我可以使用 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)))