次の集約パイプライン操作を実行することで、重複を簡単に識別できます。
db.collection.aggregate([
{
"$group": {
"_id": { "foreing": "$foreing", "value": "$value" },
"uniqueIds": { "$addToSet": "$_id" },
"count": { "$sum": 1 }
}
},
{ "$match": { "count": { "$gt": 1 } } }
])
$group 最初のステップの演算子は、foreignによってドキュメントをグループ化するために使用されます およびvalue キー値を入力してから、_idの配列を作成します uniqueIdsとしてグループ化された各ドキュメントの値 $addToSetを使用するフィールド オペレーター。これにより、グループごとに一意の式の値の配列が得られます。 $sumを使用して、パイプラインの後半の段階で使用するグループ化されたドキュメントの総数を取得します オペレーター。
パイプラインの第2段階では、 $matchを使用します カウントが1のすべてのドキュメントを除外する演算子。除外されたドキュメントは一意のインデックスキーを表します。
残りのドキュメントは、ペアforeingのキー値が重複しているコレクション内のドキュメントになります &value 。