2012-09-16 21 views

回答

7

您應該能夠通過搜索可通過: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

1

第一方法 - 使用查詢

=> (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內置分區。