【发布时间】:2012-09-16 18:03:51
【问题描述】:
什么是列出 Datomic 数据库所有分区的查询?
这应该返回
[[:db.part/db] [:db.part/tx] [:db.part/user] .... ]
其中.... 是所有用户定义的分区。
【问题讨论】:
什么是列出 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(内部版本 0.8.3524)有一个缺点,即 :db.part/tx 和 :db.part/user(三个内置分区中的两个)被特殊处理,实际上并没有通过 :db.part/db 关联:db.install/partition,所以上面查询函数的结果不会包含这两个。
这个问题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 内置分区。
【讨论】: