MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Upsert Mongodb lançant DuplicateKeyException

Le problème que je suppose pourrait être le suivant :

Vous effectuez des opérations de recherche basées sur de nombreux critères. Cela signifie que s'il échoue en raison d'une non-concordance d'un paramètre (dans les critères), il essaiera d'insérer le document.

Donc, il y a de fortes chances que vous essayiez de mettre à jour le même document avec le même _id mais que certains des autres critères ne correspondent pas, ce qui entraînera une nouvelle insertion, ce qui entraînera une exception de clé en double. Considérez l'exemple ci-dessous

test:Mongo > db.example.update({ _id : 1, a : 1, b : 1},{ $set : {d : 1}}, true, false)
test:Mongo > db.example.find()
{ "_id" : 1, "a" : 1, "b" : 1, "d" : 1 }
test:Mongo > db.example.update({ _id : 1, a : 1, b : 2},{ $set : {d : 1}}, true, false)
E11000 duplicate key error index: test.example.$_id_  dup key: { : 1.0 }