我们可以通过在:db/id
上使用datomic.api/touch
来检索反向实体ref datomic.query.EntityMap
。但是,在调用seq
函数后,:db/id
键将消失。
考虑我的代码如下:
(d/touch (first (get-allo-customers-by-user (d/db conn) [:user/email "[email protected]"])))
=> {:db / id 17592186045460,:customer / id 101,:customer / name“AAA”}
然而奇怪的事情发生在这样:
(seq (d/touch (first (get-allo-customers-by-user (d/db conn) [:user/email "[email protected]"]))))
=>([:customer / id 101] [:customer / name“AAA”])
这可能不是一个错误。请记住,Datomic不会在任何地方存储实体,它存储的只是事实。 EntityMap表示包含“假”:db/id
,但您的数据实际上如下所示:
[17592186045460 :customer/id 101]
[17592186045460 :customer/name "AAA"]
因此,当您将其转换为seq时,id丢失的事实看起来可能是非预期/随机行为,但实际上并非真正的错误。
请注意,您不必使用d/touch
来获取ID - 您只需直接读取ID即可。
(def customer (first (get-allo-customers-by-user (d/db conn) [:user/email "[email protected]"])))
(:db/id customer)