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

aggiornamento mongodb corrispondente doc non riuscito

Non è un fallimento ma di progettazione.

Sotto l'API per le operazioni in blocco , se fornisci un valore da aggiornare che corrisponda a un valore esistente del documento, questo non viene contrassegnato come modificato e in realtà non esegue alcun tentativo di riscrivere il documento.

Prova semplice:

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

Tutte le operazioni nella shell MongoDB a partire dalla versione 2.6 utilizzano in realtà l'API per operazioni in blocco . Qui è dove puoi vedere WriteResult che proviene da quell'API come prova che ciò sta accadendo.

Quindi il caso breve qui è se hai elementi "inseriti manualmente" che sono del tipo corretto su cui stai modificando, allora non vengono modificati.