MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Falha do documento correspondente à atualização do mongodb


Não é uma falha, mas por design.

Na API de operações em massa , se você fornecer um valor para atualização que corresponda a um valor existente do documento, ele não será marcado como modificado e, na verdade, não fará nenhuma tentativa de reescrever o documento.

Teste simples:
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 as operações no shell do MongoDB a partir da versão 2.6 estão realmente usando a API de operações em massa . É aqui que você vê o WriteResult que vem dessa API como prova de que isso está acontecendo.

Portanto, o caso curto aqui é se você tiver itens "inseridos manualmente" que são do tipo correto para o qual você está modificando, eles não serão alterados.