如何查询特定分区中所有数据的数据?
How to query datomic for all datoms in a particular partition?
在 Datomic 查询语言中,如何向 return 特定分区中的所有数据编写查询?这可能吗?
您通常不能为此真正使用 Datalog 查询,因为它需要遍历数据库的所有数据,而 Datalog 不允许您这样做。
给定任何实体 ID,您可以通过调用 Peer 库的 part
函数来检索它的分区。
然后您可以在数据库上使用 filter 以仅查看那些数据。这是一个 Clojure 示例:
(defn part-db
"Given a db and a partition entity id,
returns a view of the db with only the datoms which entities are of this partition."
[db part]
(d/filter db (fn [_ ^Datom datom]
(-> datom .e d/part (= part))
)))
要从名称中找出分区的实体 ID(例如 :my.partitions/part1
),您可以将其解析为实体:
(def my-part-id (:db/id (d/entity mydb :my.partitions/part1)))
从这里,您可以:
通过索引列出你数据库的所有数据:(d/datoms (part-db mydb my-part-id) :eavt)
使用 Datalog 查询过滤后的数据库。
- ...无论您对数据库值做什么!
请注意,如果您真的想获得 所有 数据,您可能需要在历史数据库上执行此操作。
在 Datomic 查询语言中,如何向 return 特定分区中的所有数据编写查询?这可能吗?
您通常不能为此真正使用 Datalog 查询,因为它需要遍历数据库的所有数据,而 Datalog 不允许您这样做。
给定任何实体 ID,您可以通过调用 Peer 库的 part
函数来检索它的分区。
然后您可以在数据库上使用 filter 以仅查看那些数据。这是一个 Clojure 示例:
(defn part-db
"Given a db and a partition entity id,
returns a view of the db with only the datoms which entities are of this partition."
[db part]
(d/filter db (fn [_ ^Datom datom]
(-> datom .e d/part (= part))
)))
要从名称中找出分区的实体 ID(例如 :my.partitions/part1
),您可以将其解析为实体:
(def my-part-id (:db/id (d/entity mydb :my.partitions/part1)))
从这里,您可以:
通过索引列出你数据库的所有数据:
(d/datoms (part-db mydb my-part-id) :eavt)
使用 Datalog 查询过滤后的数据库。
- ...无论您对数据库值做什么!
请注意,如果您真的想获得 所有 数据,您可能需要在历史数据库上执行此操作。