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

mongodb opdatering matchede doc fail

Det er ikke en fiasko, men ved design.

Under Bulk Operations API , hvis du angiver en værdi til opdatering, der matcher en eksisterende værdi af dokumentet, markeres den ikke som ændret og gør faktisk ikke noget forsøg på at omskrive dokumentet.

Simpel test:

db.junk.insert({ "a": 1 })
WriteResult({ "nInserted" : 1 })

db.junk.update({ "a": 1},{ "$set": { "a": 2 }})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

db.junk.update({ "a": 2 },{ "$set": { "a": 2 }})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })

db.junk.update({ "a": 2 },{ "$set": { "a": NumberInt(2) }})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

db.junk.update({ },{ "$set": { "a": NumberInt(2) }})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })

Alle operationer i MongoDB-skallen fra version 2.6 bruger faktisk Bulk Operations API . Det er her du ser WriteResult som kommer fra den API som bevis på, at dette sker.

Så det korte tilfælde her er, hvis du har "manuelt indsat" elementer, der er af den korrekte type, du ændrer til, så bliver de ikke ændret.




  1. Spring RedisTemplate :Serialiser flere modelklasser til JSON. Skal du bruge flere RedisTemplates?

  2. variabel med mongodb dotnotation

  3. hex i stedet for base64 i BinData() - MongoDB

  4. Forklar som om jeg er fem:Formular med tekst- og billedfelt> Ruter> Controller> Skriv til MongoDB-dokument - Hvor går GridFS hen?