sql >> Base de Datos >  >> NoSQL >> MongoDB

Mongodb upsert arrojando DuplicateKeyException

El problema que supongo que podría ser el siguiente:

Estás haciendo operaciones de búsqueda basadas en muchos criterios. Eso significa que si falla debido a una falta de coincidencia de un parámetro (en los criterios), intentará insertar el documento.

Por lo tanto, es probable que esté intentando actualizar el mismo documento con el mismo _id, pero algunos de los otros criterios no coinciden, lo que hace que se inserte nuevamente, lo que provocará una excepción de clave duplicada. Considere el siguiente ejemplo

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 }