Wie würde ich doppelte Felder in einer Mongo-Sammlung finden?
Ich möchte überprüfen, ob eines der "Namens" -Felder Duplikate sind.
{
"name" : "ksqn291",
"__v" : 0,
"_id" : ObjectId("540f346c3e7fc1054ffa7086"),
"channel" : "Sales"
}
Danke vielmals!
Antworten:
Verwenden Sie die Aggregation für
name
und erhalten Siename
mitcount > 1
:So sortieren Sie die Ergebnisse nach den meisten bis zu den wenigsten Duplikaten:
Ändern Sie " $ name " in " $ column_name ", um es mit einem anderen Spaltennamen als "name " zu verwenden.
quelle
"$match": {"_id" :{ "$ne" : null }
- ist hier nicht erforderlich, da der zweite Teil der Anweisung ausreichen würde, um das Ergebnis zu filtern. Es reicht also aus, nur nach der Gruppe zu suchencount > 1
, die sie hat._id
Feld überprüfen . Es ist immer garantiert, dass es nach dergroup
Operation nicht null ist ._id
eines Dokuments aus einer$group
Phase kann null sein.Sie können das finden
list
vonduplicate
Namen unter Verwendung der folgendenaggregate
Pipeline:Group
Alle Datensätze haben ähnlichename
.Match
diejenigengroups
mit Aufzeichnungen größer als1
.group
nochmal zuproject
allen doppelten Namen alsarray
.Der Code:
o / p:
quelle
Die Antwort, die anhic gegeben hat, kann sehr ineffizient sein, wenn Sie über eine große Datenbank verfügen und der Attributname nur in einigen Dokumenten vorhanden ist.
Um die Effizienz zu verbessern, können Sie der Aggregation eine $ -Match hinzufügen.
quelle
Erste Gruppe Fragen Sie die Gruppe nach den Feldern ab.
Dann überprüfen wir die eindeutige ID und zählen sie. Wenn die Anzahl größer als 1 ist, ist das Feld in der gesamten Sammlung doppelt vorhanden, sodass das Ding von $ match query behandelt werden soll.
quelle