查找数组中的重复条目

问题描述:

我意外地导入了一些文件,现在它们有重复的“slugs”。查找数组中的重复条目

我与mongoid工作,所以我的模型是这样的:

类为MyModel 字段:姓名,字符串#“我对象名字” 领域:蛞蝓,阵列#[“我的对象名称” ] 结束

其中slugs持有一串字符串。但有些是重复的,不应该是。

如何建立一个查询来搜索数组中的重复项?

这是我的实际做法,但其结果捏着我的条目,这是不正确

results = MyModel.unscoped.collection.aggregate([ 
     {"$match" => {"count" => {"$gt" => 1}}}, 
     {'$group' => {"_id" => "$slugs", 
        "count" => {"$sum" => 1}}}]) 

有人建议我的查询?

您可以尝试下面的聚合。

您需要在$group阶段后$match$unwindslugs对每个slug元素应用分组。

MyModel.unscoped.collection.aggregate([ 
     {$unwind => "$slugs"}, 
     {$group => {_id => "$slugs", 
      count => {"$sum" => 1}}}, 
     {$match => {count => {"$gt" => 1}}} 
]) 

这会给你所有重复的slug元素在整个集合中。

我准确的查询看起来是这样的:

results = MyModel.unscoped.collection.aggregate(
     [{"$group" => 
        {_id: {"_slugs" => "$_slugs"}, 
        recordIds: {"$addToSet" => "$_id"}, 
        count: {"$sum" => 1} 
        } 
      }, 
      {"$match" => {count: {"$gt" => 1} } } 
      ])