clojure - 在 Datomic 中,在没有撤回的情况下查询字段历史记录?

标签 clojure datomic

我想获取 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/adddb/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/

    相关文章:

    configuration - 将Clojure中的配置文件作为数据结构加载

    clojure - 在 Clojure 中使用 defprotocol 和 defrecord 的剩余参数有什么问题?

    clojure - lein 导致 jline3 终端变得愚蠢

    database - 从不就地删除或更新数据的通用数据库

    clojure - 查找 ref-to-many 属性包含所有输入元素的实体

    datomic - 当向同一属性添加相同的值时,Datomic 会做什么?

    clojure - Clojure 中的循环解构

    clojure - 如何在 map 内创建 map ?

    clojure - 具有 Datomic 依赖性的试剂模板会导致 leiningen REPL 中出现错误行为

    clojure - 将 Datomic 实体身份暴露给服务或 REST API