sql >> Base de Datos >  >> NoSQL >> MongoDB

la actualización de mongodb coincidió con la falla del documento

No es un fracaso sino por diseño.

Bajo la API de operaciones masivas , si proporciona un valor para actualizar que coincide con un valor existente del documento, entonces no se marca como modificado y en realidad no intenta volver a escribir el documento.

Prueba sencilla:

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

Todas las operaciones en el shell de MongoDB a partir de la versión 2.6 en realidad usan la API de operaciones masivas . Aquí es donde verá el WriteResult que proviene de esa API como prueba de que esto está sucediendo.

Entonces, el caso abreviado aquí es que si tiene elementos "insertados manualmente" que son del tipo correcto que está modificando, entonces no se modifican.