mongo 3 Duplikate auf eindeutigen index - dropDups
In der Dokumentation für mongoDB heißt es:
"Geändert in version 3.0: Die dropDups option ist nicht mehr verfügbar."
Gibt es irgendetwas, was ich tun kann (außer Downgrade), wenn ich wirklich wollen, um einen eindeutigen index erstellen und zerstören doppelte Einträge?
bitte beachten Sie die erhalte ich über 300 Einsätze pro Sekunde, so kann ich nicht nur löschen Sie alle Duplikate, und hoffe, keiner wird kommen in der Zeit ich bin fertig Indizierung.
- Ich verstehe nicht, Ihre Frage. Ich verstehe dich richtig, dass Sie bestehende Dokumente, einschließlich der Duplikate und jetzt wollen Sie einen eindeutigen index auf das Feld Kontaktaufnahme mit Dubletten, während gleichzeitig potenzielle neue dupes kommen?
- ja. Ich möchte, um loszuwerden, die dups und wenn neue hinzu kommen, Sie abzulehnen.
- Ich habe, hängt mit diesem Thema auch, gibt es irgendeine alternative, wie, um loszuwerden, Duplikate ohne
dropDups
in MongoDB >= 3.* ??
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja
dropDupes
ist jetzt veraltet seit der version 2.7.5, weil es nicht möglich war, korrekt Vorhersagen das Dokument gelöscht wird.In der Regel haben Sie 2 Optionen :
Verwenden Sie eine neue Sammlung :
Befassen sich mit in Ihrer eigenen Sammlung von Hand :
Für Ihren speziellen Fall würde ich empfehlen, die erste option aber mit einem trick :
make sure you ignore duplicated key error during the process.
Wie würden Sie dies tun? Es scheint die Fehler stoppen Sie die Transaktion Mitte-ProzessAls hervorgehoben durch @Maxime-Beugnet können Sie erstellen Sie eine batch-Skript zum entfernen von Duplikaten aus einer Sammlung. Ich habe auch mein Ansatz unten, dass ist relativ schnell, wenn die Anzahl der Duplikate sind klein im Vergleich zu der Sammlung Größe. Für die demonstration dieses Skript de-dupliziert die Kollektion geschaffen, indem Sie das folgende Skript:
Können Sie entfernen Sie die Duplikate in diese Sammlung, indem er eine Aggregat-Abfrage gibt alle Datensätze zurück, die mit mehr als eine doppelte.
Mithilfe der cursor können Sie dann die Iteration über die doppelte Datensätze und setzen Sie Ihre eigene business-Logik zu entscheiden, welches der Duplikate zu entfernen. Im Beispiel unten bin ich einfach nur zu halten das erste vorkommen:
Nach dem entfernen der Duplikate können Sie eine einzigartige index:
pip installieren mongo_remove_duplicate_indexes
beste Weg wird sein, erstellen Sie ein python-Skript oder in jeder Sprache, die Sie bevorzugen,Durchlaufen die Sammlung ,neue Sammlung erstellen mit einem eindeutigen index auf true gesetzt, mit db.collectionname.createIndex ({"indexname": 1},unique:true),und legen Sie Ihre Dokumente aus früheren Kollektion neue Kollektion und da die Taste, die Sie werden wollte, distinct-oder Duplikate entfernt werden, werden nicht eingefügt in ur neue Kollektion und u kann mit den ecxeption leicht mit Ausnahmebehandlung
überprüfen Sie das Paket Quellcode für das Beispiel