微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当查询是关于所有属性时,Datomic 隐藏其部分历史记录

如何解决当查询是关于所有属性时,Datomic 隐藏其部分历史记录

我有一个数据查询

(pprint (d/q '[:find ?tx ?attr ?val ?op :in $ ?e :where [?e ?attr ?val ?tx ?op]] (d/history (d/db db/conn)) 17592186766274))

产生:

#{[13194140264981 354 6 true] 
  [13194140265425 352 "OK" true] 
  [13194140255168 348 17592186593957 true] 
  [13194140265425 353 true true] 
  [13194140255168 311 #uuid "6086bec6-7a11-4238-9ce3-67e6427d7b07" true] 
  [13194140255168 346 17592186491729 true] 
  [13194140265424 351 #uuid "60871d86-cdc2-4ddf-b091-98117c3948af" true] 
  [13194140265425 349 #inst "2021-04-26T20:29:34.566-00:00" true] 
  [13194140255168 347 "{:driver \"6144c7bd-8e71-49c3-8eef-2e9d157f3e11\",:order \"c89d32d2-92da-4cde-827d-da6406877c28\"}\n" true] 
  [13194140265424 350 #inst "2021-04-26T20:29:34.472-00:00" true] 
  [13194140255168 356 #inst "2021-04-26T18:23:18.140-00:00" true]}

请注意,属性 354 在历史记录中显示仅更改一次(更改为值 6)。 那么,如果我们要求这个特定的属性...

(pprint (d/q '[:find ?tx ?val ?op :in $ ?e :where [?e 354 ?val ?tx ?op]] (d/history (d/db db/conn)) 17592186766274))

...突然发现修改了好多次:

#{[13194140264479 1 false] 
  [13194140264516 2 false] 
  [13194140264585 4 true] 
  [13194140264981 6 true] 
  [13194140264721 4 false] 
  [13194140264461 1 true] 
  [13194140264479 2 true] 
  [13194140264721 5 true] 
  [13194140264516 3 true] 
  [13194140264585 3 false] 
  [13194140264981 5 false]}

此外,如果我们再次询问当前数据库而不是历史记录,我们会得到相同的结果!

(pprint (d/q '[:find ?tx ?attr ?val ?op :in $ ?e :where [?e ?attr ?val ?tx ?op]] (d/db db/conn) 17592186766274))

给出:

#{[13194140264981 354 6 true] 
  [13194140265425 352 "OK" true] 
  [13194140255168 348 17592186593957 true] 
  [13194140265425 353 true true] 
  [13194140255168 311 #uuid "6086bec6-7a11-4238-9ce3-67e6427d7b07" true] 
  [13194140255168 346 17592186491729 true] 
  [13194140265424 351 #uuid "60871d86-cdc2-4ddf-b091-98117c3948af" true] 
  [13194140265425 349 #inst "2021-04-26T20:29:34.566-00:00" true] 
  [13194140255168 347 "{:driver \"6144c7bd-8e71-49c3-8eef-2e9d157f3e11\",:order \"c89d32d2-92da-4cde-827d-da6406877c28\"}\n" true] 
  [13194140265424 350 #inst "2021-04-26T20:29:34.472-00:00" true] 
  [13194140255168 356 #inst "2021-04-26T18:23:18.140-00:00" true]}

对于一个实体的所有属性更改的问题似乎过于笼统,但没有返回错误并提供错误的答案。为什么?

解决方法

好的,我知道发生了什么。该实体的所有属性都将 :db/noHistory 设置为 true。当我们查询特定属性时,为什么仍然显示更改仍然很神秘。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?