Het probleem waarvan ik vermoed dat het het volgende is:
U doet zoekbewerkingen op basis van vele criteria. Dat betekent dat als het mislukt vanwege een mismatch van een parameter ( in criteria ), het zal proberen het document in te voegen.
De kans is dus groot dat u hetzelfde document probeert bij te werken met dezelfde _id, maar dat sommige van de andere criteria niet overeenkomen, waardoor het opnieuw wordt ingevoegd, wat een dubbele sleuteluitzondering veroorzaakt. Beschouw het onderstaande voorbeeld
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 }