当查询是关于所有属性时,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。当我们查询特定属性时,为什么仍然显示更改仍然很神秘。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...