2017-09-23 92 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) 

它並沒有真正意義的與地圖,在它除了從地圖輸入識別實體有什麼方法可以交易您想要聲明一些新的事實,以及代表這些事實的映射條目。

相關問題