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

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

Susan Sarandon
Susan SarandonOriginal
2024-10-28 15:47:02611Durchsuche

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

MongoDB-doppelte Dokumente trotz eindeutigem Schlüssel

In MongoDB sollte die Erstellung eines eindeutigen Index für mehrere Felder verhindern, dass doppelte Dokumente mit denselben Werten für diese Felder erstellt werden Felder. In einigen Fällen können jedoch auch nach dem Hinzufügen eines Index noch doppelte Dokumente eingefügt werden.

Problem:

Es wurde ein eindeutiger Index für „uid“ und „ erstellt. sid“-Felder in einer Sammlung, aber Dokumente mit doppelten Werten für diese Felder wurden immer noch mit dem PHP-Treiber eingefügt.

Lösung:

MongoDB Shell

  1. Auf vorhandene Duplikate prüfen:

    • Führen Sie die folgende Abfrage aus, um vorhandene Duplikate zu identifizieren:
    db.user_services.aggregate([
        { "$group": {
            "_id": { "uid": "$uid", "sid": "$sid" },
            "dups": { "$push": "$_id" },
            "count": { "$sum": 1 }
        }},
        { "$match": { "count": { "$gt": 1 } }}
    ])
  2. Duplikate entfernen:

    • Entfernen Sie für jedes als Duplikat identifizierte Dokument alle bis auf das erste (Original-)Dokument:
    db.user_services.remove({ "_id": {"$in": doc.dups }});
  3. Eindeutigen Index erstellen:

    • Sobald alle Duplikate entfernt wurden, erstellen Sie den eindeutigen Index mit dem folgenden Befehl :
    db.user_services.createIndex({"uid":1 , "sid": 1},{unique:true})

PHP

  1. Update mit Upsert verwenden:

    • Anstatt .insert() zu verwenden, wechseln Sie zur Verwendung der .update()-Methode mit der Option „upsert“ auf true.
    <code class="php">$collection->update(
        array( "uid" => 1, "sid" => 1 ),
        array( '$set' => $someData ),
        array( 'upsert' => true )
    );</code>
  2. Mehrere Aktualisierungen verarbeiten:

    • Aktualisierungsabfrage umgestalten, um mehrere Aktualisierungsvorgänge korrekt zu verarbeiten:
    <code class="php">$collection->update(
        array( "uid" => 1, "sid" => 1 ),
        array(
            '$set' => array( "field" => "this" ),
            '$inc' => array( "counter" => 1 ),
            '$setOnInsert' => array( "newField" => "another" )
        ),
        array( "upsert" => true )
    );</code>

Das obige ist der detaillierte Inhalt vonWarum sehe ich trotz Verwendung 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