Modificar documentos
Visão geral
Você pode modificar documentos em uma collection MongoDB usando as operações de atualização e substituição. As operações de atualização modificam os campos e valores de um documento, mantendo outros campos e valores inalterados. Substituir operações substitui todos os campos e valores em um documento existente por campos e valores especificados, mantendo o valor do campo _id
inalterado.
O driver do Node.js fornece os seguintes métodos para alterar documentos:
updateOne()
updateMany()
replaceOne()
Dica
Laboratório interativo
Esta página inclui um breve laboratório interativo que demonstra como modificar dados usando o método updateMany()
. É possível concluir este laboratório diretamente na janela do seu navegador sem instalar o MongoDB ou um editor de código.
Para iniciar o laboratório, clique no botão Open Interactive Tutorial na parte superior da página. Para expandir o laboratório para um formato de tela inteira, clique no botão de tela inteira (⛶) no canto superior direito do painel do laboratório.
Atualize documentos
Para executar uma atualização em um ou mais documentos, crie um documento de atualização que especifique o operador de atualização (o tipo de atualização a ser executada) e os campos e valores que descrevem a alteração. Atualize os documentos usando o seguinte formato:
{ <update operator>: { <field> : { ... }, <field> : { } }, <update operator>: { ... } }
O nível superior de um documento de atualização contém um ou mais dos seguintes operadores de atualização:
$set
: substitui o valor de um campo por um campo especificado$inc
: aumenta ou diminui os valores do campo$rename
: renomeia campos$unset
: remove campos$mul
: multiplica um valor de campo por um número especificado
Consulte o manual do MongoDB Server para obter uma lista completa de operadores de atualização e seu uso.
Os operadores de atualização se aplicam apenas aos campos associados a eles em seu documento de atualização.
Observação
Pipelines de agregação em operações de atualização
Se você estiver usando o MongoDB versão 4.2 ou posterior, poderá usar aggregation pipelines compostos por um subconjunto de estágios de aggregation em operações de atualização. Para obter mais informações sobre os estágios de aggregation que têm suporte do MongoDB em aggregation pipelines usados em operações de atualização, consulte nosso tutorial sobre como criar atualizações com aggregation pipelines.
Exemplo
Considere um documento com campos descrevendo um item para venda, seu preço e quantidade disponível:
{ _id: 465, item: "Hand-thrown ceramic plate", price: 32.50, quantity: 7, }
Se você aplicar o operador de atualização $set
com um novo valor para quantity
, você poderá usar o seguinte documento de atualização:
const filter = { _id: 465 }; // update the value of the 'quantity' field to 5 const updateDocument = { $set: { quantity: 5, }, }; const result = await collection.updateOne(filter, updateDocument);
O documento atualizado se assemelha ao seguinte, com um valor atualizado no campo quantity
e todos os outros valores inalterados:
{ _id: 465, item: "Hand-thrown ceramic plate", price: 32.50, quantity: 5, }
Se uma operação de atualização não corresponder a nenhum documento em uma collection, ela não fará nenhuma alteração. As operações de atualização podem ser configuradas para executar um upsert que tenta realizar uma atualização, mas, se nenhum documento for correspondido, insere um novo documento com os campos e valores especificados.
Você não pode modificar o campo _id
de um documento nem alterar um campo para um valor que viole uma restrição de índice única. Consulte o manual do MongoDB Server para obter mais informações sobre índices únicos.
Substituir um documento
Para executar uma operação de substituição, crie um documento de substituição que consista nos campos e valores que você gostaria de usar em sua operação de substituição. Os documentos de substituição usam o seguinte formato:
{ <field>: { <value> }, <field>: { ... } }
Documentos de substituição são os documentos que você deseja substituir os documentos existentes que correspondem aos filtros de consulta.
Exemplo
Considere um documento com campos descrevendo um item para venda, seu preço e quantidade disponível:
{ _id: 501, item: "3-wick beeswax candle", price: 18.99, quantity: 10, }
Suponha que você queira substituir esse documento por um que contenha a descrição de um item totalmente diferente. Sua operação de substituição pode ser semelhante à seguinte:
const filter = { _id: 501 }; // replace the matched document with the replacement document const replacementDocument = { item: "Vintage silver flatware set", price: 79.15, quantity: 1, }; const result = await collection.replaceOne(filter, replacementDocument);
O documento substituído contém o conteúdo do documento de substituição e o campo imutável _id
da seguinte forma:
{ _id: 501, item: "Vintage silver flatware set", price: 79.15, quantity: 1, }
Se uma operação de substituição não corresponder a nenhum documento em uma coleção, ela não fará nenhuma alteração. As operações de substituição podem ser configuradas para executar um upsert que tenta realizar a substituição, mas se nenhum documento for correspondido, ele insere um novo documento com os campos e valores especificados.
Você não pode modificar o campo _id
de um documento nem alterar um campo para um valor que viole uma restrição de índice única. Consulte o manual do MongoDB Server para obter mais informações sobre índices únicos.