MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mongodb upsert lanciando DuplicateKeyException

Il problema che sto solo indovinando potrebbe essere il seguente:

Stai facendo operazioni di ricerca in base a molti criteri. Ciò significa che se fallisce a causa di una mancata corrispondenza di un parametro ( nei criteri ), proverà a inserire il documento.

Quindi, è probabile che tu stia tentando di aggiornare lo stesso documento con lo stesso _id ma alcuni degli altri criteri non corrispondono, causando l'inserimento di nuovo che causerà un'eccezione di chiave duplicata. Considera l'esempio seguente

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 }