什么是在datomic中查找重复项的好方法?

时间:2013-05-24 04:17:54

标签: datomic

我有一堆包含商家名称的记录,我希望进行查询以查找所有重复项。怎么办呢?

{:business/name "<>"}

1 个答案:

答案 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