什么是列出 Datomic 数据库的所有分区的查询?
这应该返回
[[:db.part/db] [:db.part/tx] [:db.part/user] .... ]
....
所有用户定义的分区在哪里。
您应该能够: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 (build 0.8.3524) 有一个缺点,即:db.part/tx
and :db.part/user
(三个内置分区中的两个) 被特殊处理并且实际上与:db.part/db
via没有关联:db.install/partition
,因此上述查询函数的结果不会包括两者。
这个问题将在 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 内置分区。