Heim > Artikel > Backend-Entwicklung > Warum sehe ich trotz eines eindeutigen Index immer noch doppelte Dokumente in MongoDB?
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.
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.
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.
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!