Heim  >  Artikel  >  Backend-Entwicklung  >  Warum sehe ich trotz eines eindeutigen Index immer noch doppelte Dokumente in MongoDB?

Warum sehe ich trotz eines eindeutigen Index immer noch doppelte Dokumente in MongoDB?

Susan Sarandon
Susan SarandonOriginal
2024-11-02 11:07:02897Durchsuche

Why Am I Still Seeing Duplicate Documents in MongoDB Despite Having a Unique Index?

MongoDB-doppelte Dokumente trotz eindeutigem Schlüssel

Beim Erstellen einer Sammlung in MongoDB und Hinzufügen eines eindeutigen Index mit createIndex({"uid":1 , "sid": 1 },{unique:true,dropDups:true}), kann es den Anschein haben, dass trotz der Eindeutigkeitsschlüsselbeschränkung immer noch doppelte Dokumente eingefügt werden.

MongoDB-Shell-Auflösung

Bei der Untersuchung der Indexerstellung, Es wird wahrscheinlich eine Fehlermeldung mit dem Hinweis „Fehler durch doppelten Schlüssel“ angezeigt. Dies liegt daran, dass MongoDB 3.0.0 einen Fehler aufwies, der die Erstellung des Index verhinderte, wenn Duplikate vorhanden waren.

Um dieses Problem zu beheben, entfernen Sie zunächst doppelte Datensätze mit einer Aggregatabfrage und dem $match-Operator.

<code class="javascript">db.events.aggregate([
    { "$group": {
        "_id": { "uid": "$uid", "sid": "$sid" },
        "dups": { "$push": "$_id" },
        "count": { "$sum": 1 }
    }},
    { "$match": { "count": { "$gt": 1 } }}
]).forEach(function(doc) {
    doc.dups.shift();
    db.events.remove({ "_id": {"$in": doc.dups }});
});</code>

Sobald Duplikate entfernt wurden, kann der eindeutige Index erstellt werden, ohne dass ein Fehler auftritt.

PHP-Lösung

Um Dokumente einzufügen, die noch nicht vorhanden sind, oder vorhandene Dokumente zu aktualisieren, verwenden Sie die update()-Methode mit der Upsert-Option auf true.

<code class="php">$collection->update(
    array( "uid" => 1, "sid" => 1 ),
    array( '$set' => $someData ),
    array( 'upsert' => true )
);</code>

Dadurch wird das Dokument eingefügt, wenn es nicht vorhanden ist. Andernfalls wird das Dokument aktualisiert, indem die im $set-Array angegebenen Felder festgelegt werden.

Zusätzliche Überlegungen

  • Die Option dropDups, die in verwendet wird Die anfängliche Indexerstellung ist in MongoDB 3.0.0 nicht mehr verfügbar.
  • Die Syntax der .update()-Methode erfordert drei Argumente: „query“, „update“ und „options“.
  • Update-Vorgänge innerhalb des „Update“-Dokuments sollten nicht mehr als einmal auf denselben Pfad zugreifen.

Das obige ist der detaillierte Inhalt vonWarum sehe ich trotz eines eindeutigen Index immer noch doppelte Dokumente in MongoDB?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn