Datomic.query.EntityMap может возвращать обратную ссылку на сущность. Тем не менее, поведение выходит за рамки моего прямого ожидания. Это ошибка?
Мы можем получить обратный объект :db/id
используя datomic.api/touch
на datomic.query.EntityMap
, Однако после звонка seq
функция, :db/id
ключ исчезнет.
Рассмотрим мой код следующим образом:
(d/touch (first (get-allo-customers-by-user (d/db conn) [:user/email "aaa@example.com"])))
=> {: db / id 17592186045460,: customer / id 101,: customer / name "AAA"}
Однако странные вещи случаются так:
(seq (d/touch (first (get-allo-customers-by-user (d/db conn) [:user/email "aaa@example.com"]))))
=> ([: customer / id 101] [: customer / name "AAA"])
0 ответов
Это, вероятно, не ошибка. Имейте в виду, что Datomic нигде не хранит сущности, все, что она хранит, это факты. Представление EntityMap содержит "подделку" :db/id
, но ваши данные на самом деле выглядит так:
[17592186045460 :customer/id 101]
[17592186045460 :customer/name "AAA"]
Таким образом, тот факт, что идентификатор теряется, когда вы конвертируете его в последовательность, кажется, что это может быть непреднамеренное / случайное поведение, но на самом деле это не ошибка как таковая.
Обратите внимание, что вам не нужно использовать d/touch
чтобы получить идентификатор - вы можете просто прочитать идентификатор напрямую.
(def customer (first (get-allo-customers-by-user (d/db conn) [:user/email "aaa@example.com"])))
(:db/id customer)