在datomic中获取插入实体的id?

TG-*_*G-T 12 clojure datomic

在datomic中运行事务以插入值后,如何使用事务的返回值来获取已创建的任何实体的ID?

这是插入后得到的返回值的示例:

#<promise$settable_future$reify__4841@7c92b2e9: {:db-before datomic.db.Db@62d0401f, :db-after datomic.db.Db@bba61dfc,
 :tx-data [#Datum{:e 13194139534331 :a 50 
:v #inst "2013-06-19T11:38:08.025-00:00" 
:tx 13194139534331 :added true} #Datum{:e 17592186045436 .....
Run Code Online (Sandbox Code Playgroud)

我可以看到基础数据......如何提取它们的值?

a2n*_*ade 12

使用d/resolve-tempid.如果您要处理单个实体,查看是:tx-data 可行的,但如果您的交易包含多个实体,那么您将不知道它们出现的顺序:tx-data.

你应该做的是使用其中一个(d/tempid)或它的文字表示给你的实体临时id(在交易之前)#db/id[:db.part/user _negativeId_],然后用d/resolve-tempid你的临时id转到数据库给出的真实id.代码看起来像:

(d/resolve-tempid (d/db conn) (:tempids tx) (d/tempid :db.part/user _negativeId_))
Run Code Online (Sandbox Code Playgroud)

有关完整的代码示例,请参阅此要点.


TG-*_*G-T 6

啊,弄清楚了.

我不得不贬低Clojure的承诺,然后我能够掏出我想要的价值观:

 (:e (second (:tx-data @(transact! conn query))))
Run Code Online (Sandbox Code Playgroud)