mongodb unmöglich (?) E11000 duplicate-key-Fehler dup-Taste, wenn upserting
Mein Verständnis ist, dass update mit einem einfachen Beispiel:: true auf einem einzigen Dokument ist eine Atomare operation, so sollte dies nie Ergebnis in einem doppelten Schlüssel Fehler, vor allem nicht auf dem primären Schlüssel _id, wenn die Sammlung hat keine unique-ly indizierte Felder:
Order.update({ _id: order._id }, query, { upsert: true }, cb) //with mongoose
Aber das wird in der mongod.log:
2015-03-27T09:39:10.349-0400 I WRITE [conn258236] update xyz.orders
query: { _id: "6353f880-c6a7-4260-809f-98e0af27b9a2" } update: { $set: { ...
} keyUpdates:0 writeConflicts:0 **exception: E11000 duplicate key error dup
key: { : "6353f880-c6a7-4260-809f-98e0af27b9a2" } code:11000** numYields:1
locks:{} 138ms
2015-03-27T09:39:10.349-0400 I COMMAND [conn258236] command xyz.$cmd
command: update { update: "orders", writeConcern: { w: 1 }, ordered: true,
updates: [ { q: { _id: "6353f880-c6a7-4260-809f-98e0af27b9a2" }, u: { $set: {
... } }, multi: false, upsert: true } ] } keyUpdates:0 writeConflicts:0
numYields:0 reslen:235 locks:{} 139ms
Hier ist die Ausgabe von db.orders.getIndexes()
:
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "xyz.orders"
},
Verwenden wir MongoDB version 3.0.0 mit WiredTiger.
- Was ist der Wert von
order._id
undquery
- tun Sie beide haben die gleiche_id
Wert? - Ja. Die Zeilen in der log sind für eine bestimmte Ausführung des Mungo rufen Sie mit der Bestellung._id als "6353f880-c6a7-4260-809f-98e0af27b9a2".
- Die Anrufe kommen aus der gleichen Verbindung mit
{w : 1 }
, so ist es wahrscheinlich, Sie waren Seriell und nicht parallel - wie sind Sie mit der Generierung derorder._id
Wert? Sind Sie sicher, dass Sie nicht rufen Sie das update zweimal mit der gleichenorder._id
im gleichen thread/Prozess? - Das update wurde tatsächlich als zweimal mit der gleichen Reihenfolge._id. Aber ich dachte, das sollte in Ordnung sein mit einem einfachen Beispiel: das erste anlegen sollte, mit, dass _id und das zweite sollte finden, dass _id und zu aktualisieren, richtig?
- was war das Fazit hier? Ich Stand vor einem ähnlichen Problem heute
- Vor dem gleichen problem, niemand weiß, warum dies geschehen könnte?
- Gleiche problem hier auch.. Hast du eine Lösung finden @Jason
- Meine Lösung war es nur, Griff der Fehlercode E11000. Sorry habe immer noch keine Erklärung, warum der Fehler Auftritt. Vielleicht bitten Sie eine MongoDB-Entwickler.
- Wir stehen vor dem gleichen Problem auch, mongo 3.2.1.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich befürchte, das ist ein ständiges problem. Ich hatte das gleiche problem und ich fand ein jira-ticket dazu:
https://jira.mongodb.org/browse/SERVER-14322
Die "Lösung" hier ist hinzuzufügen, wiederholen-code in den client.