Datomic.query.EntityMap可以返回反向实体引用。但是,这种行为超出了我的直接预期。是虫子吗?

时间:2019-02-25 09:38:15

标签: clojure datomic

我们可以在namespace WebBrowserHelloworld { public partial class MainWindow : Window { WebBrowser mainBrowser = new WebBrowser(); public MainWindow() { InitializeComponent(); mainBrowser.Source = new Uri("https://google.com"); maingrid.Children.Add(mainBrowser); } } } 上使用:db/id来检索反向实体ref datomic.api/touch。但是,在调用datomic.query.EntityMap函数之后,seq键将消失。

这样考虑我的代码:

:db/id

=> {:db / id 17592186045460,:customer / id 101,:customer / name“ AAA”}

但是奇怪的事情是这样发生的:

(d/touch (first (get-allo-customers-by-user  (d/db conn)  [:user/email "aaa@example.com"])))

=>([:customer / id 101] [:customer / name“ AAA”])

1 个答案:

答案 0 :(得分:0)

那可能不是错误。请记住,Datomic不会在任何地方存储实体,它存储的都是事实。 EntityMap表示形式包含“伪造” :db/id,但您的数据实际上如下所示:

[17592186045460 :customer/id 101]
[17592186045460 :customer/name "AAA"]

因此,当您将id转换为seq时,id丢失的事实似乎是一种意想不到的/随机的行为,但这本身并不是一个错误。

请注意,您不必使用d/touch来获得ID的保留-您可以直接直接读取ID。

(def customer (first (get-allo-customers-by-user (d/db conn) [:user/email "aaa@example.com"])))
(:db/id customer)