Use o
update()
método ou save()
método para atualizar documentos no MongoDB. No MongoDB, tanto o
update()
e o método save()
pode ser usado para atualizar um documento. A
update()
O método atualiza valores em um documento ou documentos existentes, enquanto o método save()
O método substitui um documento pelo documento passado como parâmetro. No entanto, o
update()
O método também pode substituir todo o documento, dependendo do parâmetro que é passado. A update()
Método
Aqui está um exemplo do
update()
método. Primeiro, vamos selecionar um registro para atualizar:
db.musicians.find({ _id: 6 }).pretty()
Resultado:
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
Jeff realmente faz muito mais do que apenas cantar. Então vamos adicionar mais alguns instrumentos. Usaremos o
$set
operador para atualizar um único campo. db.musicians.update( { _id: 6 }, { $set:{ instrument : [ "Vocals", "Guitar", "Sitar" ] } } )
Resultado:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Agora, se fizermos outra consulta, veremos que o documento foi atualizado conforme especificado:
db.musicians.find({ _id: 6 }).pretty()
Resultado:
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : [ "Vocals", "Guitar", "Sitar" ], "born" : 1969 }
Mais algumas opções:
- Se o campo não existir, o
$set
O operador adicionará um novo campo com o valor especificado, desde que o novo campo não viole uma restrição de tipo. - Você também pode usar
{ upsert: true }
para criar um novo documento quando nenhum documento corresponder à consulta. - Você pode usar
{ multi: true }
para atualizar vários documentos que atendem aos critérios de consulta. Por padrão, esta opção é definida comofalse
, portanto, apenas um documento será atualizado se você não o definir comotrue
.
O save()
Método
O
save()
é um cruzamento entre update()
e insert()
. Quando você usa o save()
método, se o documento existir, ele será atualizado. Se não existir, será criado. Se você não especificar um
_id
campo, o MongoDB criará um documento com um _id
que contém um ObjectId
valor (de acordo com um insert()
). Se você especificar um
_id
campo, ele executa uma atualização com { upsert: true }
, ou seja, ele cria um novo documento se nenhum documento corresponder à consulta. No momento, não temos nenhum documento em nossos produtores coleção. Vamos criar um usando o
save()
método:db.producers.save({ _id: 1, name: "Bob Rock" })
Resultado:
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : 1 })
Agora, se pesquisarmos os produtores coleção, vemos nosso registro recém-criado:
db.producers.find()
Resultado:
{ "_id" : 1, "name" : "Bob Rock" }