次の集約パイプライン操作を実行することで、重複を簡単に識別できます。
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
。