列出Datomic數據庫的所有分區的查詢是什麼?查詢以列出Datomic中的所有分區
這應返回
[[:db.part/db] [:db.part/tx] [:db.part/user] .... ]
其中....
是所有用戶定義的分區。
列出Datomic數據庫的所有分區的查詢是什麼?查詢以列出Datomic中的所有分區
這應返回
[[:db.part/db] [:db.part/tx] [:db.part/user] .... ]
其中....
是所有用戶定義的分區。
您應該能夠通過搜索可通過:db.install/partition
屬性與:db.part/db
實體相關聯的所有實體,以獲取數據庫中的所有分區的列表:
(ns myns
(:require [datomic.api :as d]))
(defn get-partitions [db]
(d/q '[:find ?ident :where [:db.part/db :db.install/partition ?p]
[?p :db/ident ?ident]]
db))
注意
當前版本Datomic(build 0.8.3524)有一個缺點,即:db.part/tx
和:db.part/user
(三個內置分區中的兩個)被特殊處理,並且實際上不通過0與:db.part/db
關聯,所以上述查詢函數的結果將不包含這兩個。
這個問題is going to be addressed在Datomic的未來版本之一。同時,您應該自己處理結果集中的:db.part/tx
和:db.part/user
。
第一方法 - 使用查詢
=> (q '[:find ?i :where
[:db.part/db :db.install/partition ?p] [?p :db/ident ?i]]
(db conn))
第二方法 - 從db對象
(filter #(instance? datomic.db.Partition %) (:elements (db conn)))
第二種方法返回datomic.db.Partition對象的序列,其可以是如果我們想獲得有關分區的更多信息,這將會很有用。
這兩種方法都有已知的缺陷/不一致性:它們不返回:db.part/tx和:db.part/user內置分區。