sql >> Databasteknik >  >> NoSQL >> MongoDB

mongodb update matched doc fail

Det är inte ett misslyckande utan genom design.

Under Bulk Operations API , om du anger ett värde att uppdatera som matchar ett befintligt värde i dokumentet så markeras det inte som modifierat och gör faktiskt inga försök att skriva om dokumentet.

Enkelt 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 })

Alla operationer i MongoDB-skalet från och med version 2.6 använder faktiskt Bulk Operations API . Det är här du ser WriteResult som kommer från det API:et som bevis på att detta händer.

Så det korta fallet här är att om du har "manuellt infogat" objekt som är av rätt typ som du ändrar till, så ändras de inte.




  1. Vad är tcp-backlog i redis.conf

  2. installera MongoDB java-drivrutin

  3. MongoDB $atan2

  4. Mongodb-tjänsten startar inte