Det problem, som jeg bare gætter på, kan være følgende:
Du finder operationer baseret på mange kriterier. Det betyder, at hvis det mislykkes på grund af uoverensstemmelse mellem en param (i kriterier), vil det forsøge at indsætte dokumentet.
Så der er chancer for, at du forsøger at opdatere det samme dokument med samme _id, men nogle af de andre kriterier matcher ikke, hvilket får det til at indsætte igen, hvilket vil forårsage duplikatnøgleundtagelse. Overvej nedenstående eksempel
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 }