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

Susan Sarandon
Freigeben: 2024-10-28 15:47:02
Original
607 Leute haben es durchsucht

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 } }}
    ])
    Nach dem Login kopieren
  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 }});
    Nach dem Login kopieren
  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})
    Nach dem Login kopieren

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>
    Nach dem Login kopieren
  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>
    Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!