Jak znaleźć zduplikowane pola w kolekcji Mongo.
Chciałbym sprawdzić, czy którekolwiek z pól „nazwa” jest duplikatem.
{
"name" : "ksqn291",
"__v" : 0,
"_id" : ObjectId("540f346c3e7fc1054ffa7086"),
"channel" : "Sales"
}
Wielkie dzięki!
Odpowiedzi:
Włącz agregację
name
i korzystajname
zcount > 1
:Aby posortować wyniki według największej lub najmniejszej liczby duplikatów:
Aby użyć innej nazwy kolumny niż „name”, zmień „ $ name ” na „ $ column_name ”
źródło
"$match": {"_id" :{ "$ne" : null }
- jest tu zbędna, gdyż druga część instrukcji wystarczyłaby do przefiltrowania wyniku. Więc wystarczy tylko sprawdzenie, czy grupa macount > 1
._id
pole. Zawsze gwarantuje się, że pogroup
operacji nie będzie zerowa ._id
Dokumentu ze$group
sceny może być null.Można znaleźć
list
wduplicate
nazwach stosując następująceaggregate
rurociągu:Group
wszystkie rekordy mają podobnename
.Match
tychgroups
, którzy mają rekordy większe niż1
.group
ponownie doproject
wszystkich zduplikowanych nazw jako plikuarray
.Kod:
o / p:
źródło
Odpowiedź udzielona przez anhic może być bardzo nieefektywna, jeśli masz dużą bazę danych, a nazwa atrybutu jest obecna tylko w niektórych dokumentach.
Aby zwiększyć wydajność, możesz dodać dopasowanie $ do agregacji.
źródło
Pierwsza grupa Zapytaj grupę według pól.
Następnie sprawdzamy unikalny identyfikator i liczymy go, jeśli liczba jest większa niż 1, to pole jest zduplikowane w całej kolekcji, więc to ma być obsługiwane przez zapytanie $ match.
źródło