2017-03-03 5 views
0

私は誤っていくつかのドキュメントをインポートしましたが、現在は重複した "slug"があります。配列内に重複したエントリが見つかりました

私のモデルは次のようになりますので、私は、mongoidで働いています:

クラスに、mymodel フィールド:名前、文字列#「私のオブジェクト名」 フィールド:ナメクジ、アレイ#[「私のオブジェクト名」 ] end

ここで、slugsは文字列の配列を保持します。しかし、いくつかは重複しているべきではありません。

クエリを作成して配列内の重複を検索するにはどうすればよいですか?

これは私の実際的なアプローチであるが、その結果は

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

真されていない、私のすべてのエントリを保持している誰かが私にクエリを提案することはできますか?

答えて

0

以下の集計を試すことができます。

$groupステージの後に$matchと、各スラッグエレメントにグループ化を適用する場合は、$unwindslugsが必要です。

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

これは、コレクション全体ですべての重複したスラッグ要素を提供します。

0

私の正確なクエリは次のようになります。

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