2017-09-23 44 views
0

有一个属性:organisation/ord。这是我应得的数据结构传递给d/transact给属性赋予新值的更简单的方法

(assoc (d/pull db [:db/id] (:db/id organisation)) :organisation/ord new-org-ord) 
;; => {:db/id 17592186045432, :organisation/ord 4198} 

这里organisationdatomic.query.EntityMap型和new-org-ordinteger。这工作正常,但似乎笨拙。有简单的代码可以完成同样的工作吗?

思考所有我需要做的就是把EntityMap成为一个真正的map我尝试这样做:

(assoc (into {} organisation) :organisation/last-invoice-ordinal new-org-ord) 

不过的了:

:db.error /不被一个实体无法解析实体:#:分贝{:ID 17592186045433}在datom [-9223301668109597772:组织/时间跨度#:分贝{:ID 17592186045433}]

+0

当你已经拥有'db/id'时,为了将'EntityMap'转换为Clojure'Map',我觉得很麻烦。 @Chris Murphy下面的答案就是用给定的'db/id'创建一个新的地图。 –

回答

0

这是更简单的:

{:db/id (:db/id organisation), :organisation/ord new-org-ord} 

而且这里的另一个替代方案,也可以工作:

(assoc (select-keys organisation [:db/id]) :organisation/ord new-org-ord) 

它并没有真正意义的与地图,在它除了从地图输入识别实体有什么方法可以交易您想要声明一些新的事实,以及代表这些事实的映射条目。

相关问题