MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongo findet Duplikate für Einträge für zwei oder mehr Felder

Sie können die Duplikate leicht identifizieren, indem Sie die folgende Aggregations-Pipeline-Operation ausführen:

db.collection.aggregate([
    { 
        "$group": { 
            "_id": { "foreing": "$foreing", "value": "$value" }, 
            "uniqueIds": { "$addToSet": "$_id" },
            "count": { "$sum": 1 } 
        }
    }, 
    { "$match": { "count": { "$gt": 1 } } }
])

Die $group Operator im ersten Schritt wird verwendet, um die Dokumente nach dem foreign zu gruppieren und value Schlüsselwerte und erstellen Sie dann ein Array von _id Werte für jedes der gruppierten Dokumente als uniqueIds Feld mit $addToSet Operator. Dadurch erhalten Sie ein Array mit eindeutigen Ausdruckswerten für jede Gruppe. Rufen Sie mit $sum die Gesamtzahl der gruppierten Dokumente ab, die in den späteren Pipeline-Phasen verwendet werden sollen Betreiber.

Verwenden Sie in der zweiten Pipelinephase den $match Operator, um alle Dokumente mit einer Anzahl von 1 herauszufiltern. Die herausgefilterten Dokumente stellen eindeutige Indexschlüssel dar.

Die verbleibenden Dokumente sind diejenigen in der Sammlung, die doppelte Schlüsselwerte für das Paar foreing haben &value .