我有一堆包含商家名称的记录,我希望进行查询以查找所有重复项。怎么办呢?
{:business/name "<>"}
答案 0 :(得分:4)
如果您尝试对属性值强制执行唯一性,则应该查看:db/unique
schema attribute。
要查找重复值和重复次数,请使用:
(->> (d/datoms db :aevt :business/name)
(map :v)
(frequencies)
(filter #(> (second %) 1)))
使用datomic.api/datoms
API访问原始AEVT索引以流式传输:business/name
属性值,计算其频率并根据某些条件(即多次出现)对其进行过滤。您还可以使用数据记录和aggregation functions:
(->> (d/q '[:find (frequencies ?v)
:with ?e
:in $ ?a
:where [?e ?a ?v]]
db :business/name)
(ffirst)
(filter #(> (second %) 1)))
要查找具有重复属性值的实体,请使用:
(->> (d/datoms db :aevt :business/name)
(group-by :v)
(filter #(> (count (second %)) 1))
(mapcat second)
(map :e))
还利用d/datoms
API来完成它。有关完整的代码示例(包括数据记录实现),请参阅https://gist.github.com/a2ndrade/5641681