`Datomic.query.EntityMap`可以返回反向实体引用。但是,这种行为超出了我的预期。这是一个错误吗?

问题描述 投票:0回答:1

我们可以通过在: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”])

clojure datomic
1个回答
0
投票

这可能不是一个错误。请记住,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)
© www.soinside.com 2019 - 2024. All rights reserved.