在 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/add
和 db/retract
)。
我想也许我可以用交易查询数据,然后检查操作。但是我找不到查询数据的方法。
(d/pull db '[*] tx-id)
不包括数据。
- 搜索引擎结果对“query datomic transaction datoms”等关键字没有帮助
- 搜索数据事务模式没有结果
我可以使用 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)))
我想获取 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/add
和 db/retract
)。
我想也许我可以用交易查询数据,然后检查操作。但是我找不到查询数据的方法。
(d/pull db '[*] tx-id)
不包括数据。- 搜索引擎结果对“query datomic transaction datoms”等关键字没有帮助
- 搜索数据事务模式没有结果
我可以使用 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)))