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
Auf vorhandene Duplikate prüfen:
db.user_services.aggregate([ { "$group": { "_id": { "uid": "$uid", "sid": "$sid" }, "dups": { "$push": "$_id" }, "count": { "$sum": 1 } }}, { "$match": { "count": { "$gt": 1 } }} ])
Duplikate entfernen:
db.user_services.remove({ "_id": {"$in": doc.dups }});
Eindeutigen Index erstellen:
db.user_services.createIndex({"uid":1 , "sid": 1},{unique:true})
PHP
Update mit Upsert verwenden:
<code class="php">$collection->update( array( "uid" => 1, "sid" => 1 ), array( '$set' => $someData ), array( 'upsert' => true ) );</code>
Mehrere Aktualisierungen 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!