のためのエントリの重複を見つける:Mongoのは、私がこのような文書を持っている2つ以上のフィールド
{
"_id" : ObjectId("557eaf444ba222d545c3dffc"),
"foreing" : ObjectId("538726124ba2222c0c0248ae"),
"value" : "test",
}
私はペアforeing
& value
の値が重複しているすべてのドキュメントを検索します。
のためのエントリの重複を見つける:Mongoのは、私がこのような文書を持っている2つ以上のフィールド
{
"_id" : ObjectId("557eaf444ba222d545c3dffc"),
"foreing" : ObjectId("538726124ba2222c0c0248ae"),
"value" : "test",
}
私はペアforeing
& value
の値が重複しているすべてのドキュメントを検索します。
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
次の集計パイプライン操作を実行します。
db.collection.aggregate([
{
"$group": {
"_id": { "foreing": "$foreing", "value": "$value" },
"uniqueIds": { "$addToSet": "$_id" },
"count": { "$sum": 1 }
}
},
{ "$match": { "count": { "$gt": 1 } } }
])
最初のステップで$group
オペレータはforeign
とvalue
キー値によってグループに文書を使用し、その後を用いuniqueIds
フィールドとしてグループ化された文書のそれぞれについて_id
値の配列を作成しています$addToSet
オペレータ。これにより、各グループの固有の式の値の配列が得られます。 $sum
演算子を使用して、後のパイプラインステージで使用するグループ化されたドキュメントの総数を取得します。第2のパイプラインステージにおいて
、1濾過アウトドキュメントの数とすべての文書を除外する$match
演算子を使用するには、一意のインデックスキーを表します。
残りのドキュメントは、ペアforeing
& value
の重複キー値を持つコレクション内のドキュメントになります。