为属性赋予新值的更简单方法

时间:2017-09-23 03:53:21

标签: datomic

有一个属性:organisation/ord。这就是我将数据结构传递给d/transact的方式:

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

此处organisation的类型为datomic.query.EntityMapnew-org-ordinteger。这很好,但看起来很笨拙。是否有更简单的代码执行相同的工作?

认为我需要做的就是将EntityMap转变成真实的map我试过这个:

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

但得到了:

  

:db.error / not-an-entity无法在datom中解析实体:#:db {:id 17592186045433} [-9223301668109597772:organization / timespan#:db {:id 17592186045433}]

1 个答案:

答案 0 :(得分:0)

这更简单:

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

这里还有另一种选择:

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

与地图条目中除了地图条目之外的任何地图进行交易以确定要对其声明某些新事实的实体ID以及表示的地图条目一起真的没有意义那些事实。