2017-03-03 115 views
0

我意外地導入了一些文件,現在它們有重複的「slugs」。查找數組中的重複條目

我與mongoid工作,所以我的模型是這樣的:

類爲MyModel 字段:姓名,字符串#「我對象名字」 領域:蛞蝓,陣列#[「我的對象名稱」 ] 結束

其中slugs持有一串字符串。但有些是重複的,不應該是。

如何建立一個查詢來搜索數組中的重複項?

這是我的實際做法,但其結果捏着我的條目,這是不正確

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

有人建議我的查詢?

回答

0

您可以嘗試下面的聚合。

您需要在$group階段後$match$unwindslugs對每個slug元素應用分組。

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

這會給你所有重複的slug元素在整個集合中。

0

我準確的查詢看起來是這樣的:

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