sql >> Database >  >> NoSQL >> MongoDB

mongodb-update komt overeen met document mislukt

Het is geen mislukking, maar door het ontwerp.

Onder de Bulk Operations API , als u een bij te werken waarde opgeeft die overeenkomt met een bestaande waarde van het document, wordt deze niet gemarkeerd als gewijzigd en wordt er feitelijk geen poging gedaan om het document opnieuw te schrijven.

Eenvoudige 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 bewerkingen in de MongoDB-shell vanaf versie 2.6 gebruiken feitelijk de Bulk Operations API . Hier zie je de WriteResult die van die API komt als bewijs dat dit gebeurt.

Dus het korte geval hier is dat als je "handmatig ingevoegde" items hebt die van het juiste type zijn waarnaar je aan het wijzigen bent, ze niet worden gewijzigd.




  1. Hoe maak je veilig verbinding met Heroku Redis via de opdrachtregel?

  2. MongoDB $ regex-query en mogelijke exploits

  3. Elke tweede run gooit:MongoError:Topology werd vernietigd

  4. Online Apache HBase-back-ups met CopyTable