2016-02-25 7 views

答えて

6

2つのキーを基にしてグループ化し、数が1より大きい要素を選択するだけで、重複を見つけることができます。

クエリ: -

db.mycollection.aggregate(
    { $group: { 
     _id: { foreing: "$foreing", value: "$value" }, 
     count: { $sum: 1 }, 
     docs: { $push: "$_id" } 
    }}, 
    { $match: { 
     count: { $gt : 1 } 
    }} 
) 

OUTPUTのようになります: -

{ 
    "result" : [ 
     { 
      "_id" : { 
       "foreing" : 1, 
       "value" : 2 
      }, 
      "count" : 2, 
      "docs" : [ 
       ObjectId("34567887654345678987"), 
       ObjectId("34567887654345678987") 
      ] 
     } 
    ], 
    "ok" : 1 
} 

参考リンクのようになります: - あなたは簡単で重複を識別することができHow to find mongo documents with a same field

9

次の集計パイプライン操作を実行します。

db.collection.aggregate([ 
    { 
     "$group": { 
      "_id": { "foreing": "$foreing", "value": "$value" }, 
      "uniqueIds": { "$addToSet": "$_id" }, 
      "count": { "$sum": 1 } 
     } 
    }, 
    { "$match": { "count": { "$gt": 1 } } } 
]) 

最初のステップで$groupオペレータはforeignvalueキー値によってグループに文書を使用し、その後を用いuniqueIdsフィールドとしてグループ化された文書のそれぞれについて_id値の配列を作成しています$addToSetオペレータ。これにより、各グループの固有の式の値の配列が得られます。 $sum演算子を使用して、後のパイプラインステージで使用するグループ化されたドキュメントの総数を取得します。第2のパイプラインステージにおいて

、1濾過アウトドキュメントの数とすべての文書を除外する$match演算子を使用するには、一意のインデックスキーを表します。

残りのドキュメントは、ペアforeing & valueの重複キー値を持つコレクション内のドキュメントになります。

関連する問題