Możesz łatwo zidentyfikować duplikaty, uruchamiając następującą operację potoku agregacji:
db.collection.aggregate([
{
"$group": {
"_id": { "foreing": "$foreing", "value": "$value" },
"uniqueIds": { "$addToSet": "$_id" },
"count": { "$sum": 1 }
}
},
{ "$match": { "count": { "$gt": 1 } } }
])
$group
operator w pierwszym kroku służy do grupowania dokumentów według foreign
i value
wartości klucza, a następnie utwórz tablicę _id
wartości dla każdego z grupowanych dokumentów jako uniqueIds
pole za pomocą $addToSet
operator. Daje to tablicę unikalnych wartości wyrażeń dla każdej grupy. Uzyskaj całkowitą liczbę zgrupowanych dokumentów do użycia w późniejszych etapach potoku za pomocą $sum
operatora.
W drugim etapie potoku użyj $match
operator, aby odfiltrować wszystkie dokumenty z liczbą 1. Odfiltrowane dokumenty reprezentują unikalne klucze indeksu.
Pozostałe dokumenty będą tymi w kolekcji, które mają zduplikowane wartości klucza dla pary foreing
&value
.