można łatwo zidentyfikować duplikatów przez uruchomienie następującej operacji potoku agregacji:
db.collection.aggregate([
{
"$group": {
"_id": { "foreing": "$foreing", "value": "$value" },
"uniqueIds": { "$addToSet": "$_id" },
"count": { "$sum": 1 }
}
},
{ "$match": { "count": { "$gt": 1 } } }
])
$group
operatora w pierwszym etapie stosuje się grupy dokumentów przez wartości kluczy foreign
i value
a następnie utworzyć tablicę _id
wartości dla każdego ze zgrupowanych dokumentach w dziedzinie uniqueIds
stosując $addToSet
operator. Daje to tablicę unikatowych wartości wyrażenia dla każdej grupy. Uzyskaj łączną liczbę zgrupowanych dokumentów, które będą używane w późniejszych etapach potoku za pomocą operatora .
W drugim etapie rurociągu użyć operatora $match
odfiltrować wszystkie dokumenty zliczanie 1. odfiltrowanym Dokumenty są unikalne klucze indeksu.
Pozostałe dokumenty będą tymi z kolekcji, które mają zduplikowane wartości klucza dla pary foreing
& value
.