如何查询特定分区中所有数据的数据?

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)))

从这里,您可以:

  1. 通过索引列出你数据库的所有数据:(d/datoms (part-db mydb my-part-id) :eavt)

  2. 使用 Datalog 查询过滤后的数据库。

  3. ...无论您对数据库值做什么!

请注意,如果您真的想获得 所有 数据,您可能需要在历史数据库上执行此操作。