3
我正在使用Datomic,並希望根據我的查詢從任意數量的時間點拉出整個實體。如果我在查詢執行之前知道這些實例,那麼Datomic docs有一些關於如何從兩個不同的數據庫實例執行查詢的體面示例。但是,我希望查詢確定我需要的「as-of」類型數據庫實例的數量,然後在抽取實體時使用這些實例。這是我到目前爲止有:Datomic:如何查詢查詢中的任意數量的數據庫?
(defn pull-entities-at-change-points [entity-id]
(->>
(d/q
'[:find ?tx (pull ?dbs ?client [*])
:in $ [?dbs ...] ?client
:where
[?client ?attr-id ?value ?tx true]
[(datomic.api/ident $ ?attr-id) ?attr]
[(contains? #{:client/attr1 :client/attr2 :client/attr3} ?attr)]
[(datomic.api/tx->t ?tx) ?t]
[?tx :db/txInstant ?inst]]
(d/history (d/db db/conn))
(map #(d/as-of (d/db db/conn) %) [1009 1018])
entity-id)
(sort-by first)))
我試圖找到所有交易,其中一個:client
實體的某些屬性發生變化,進而拉動實體,因爲它在這些點的時間存在。行:(map #(d/as-of (d/db db/conn) %) [1009 1018])
是我嘗試在兩個特定事務處創建一系列數據庫實例,我知道客戶端的屬性已更改。理想情況下,我想在一個查詢中完成所有這些操作,但我不確定這是否可行。
希望這是有道理的,但讓我知道如果你需要更多的細節。
謝謝你的迴應。這非常有幫助! –