在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)
有关完整的代码示例,请参阅此要点.
啊,弄清楚了.
我不得不贬低Clojure的承诺,然后我能够掏出我想要的价值观:
(:e (second (:tx-data @(transact! conn query))))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2699 次 |
| 最近记录: |