列出Datomic数据库的所有分区的查询是什么?
这应该返回
[[:db.part/db] [:db.part/tx] [:db.part/user] .... ]
其中....
是所有用户定义的分区。
答案 0 :(得分:7)
您应该能够通过:db.part/db
属性搜索与:db.install/partition
实体关联的所有实体来获取数据库中所有分区的列表:
(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(版本0.8.3524)有一个缺点,即:db.part/tx
和:db.part/user
(三个内置分区中的两个)被特别处理,实际上并没有与:db.part/db
通过:db.install/partition
,因此上述查询功能的结果将不包含这两项。
在Datomic的未来版本之一中出现此问题is going to be addressed。在此期间,您应该自己在结果集中加入:db.part/tx
和:db.part/user
。
答案 1 :(得分: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内置分区。