在Datomic查询语言中,如何编写查询以返回特定分区中的所有数据?这甚至可能吗?
答案 0 :(得分:2)
你通常不能真正使用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查询已过滤的数据库。
请注意,如果您确实希望获取所有数据,那么您可能希望在历史数据库中执行此操作。