Atualização de Dados do Documento MongoDB Usando o Shell do Mongo

Este capítulo apresenta a atualização de dados do documento MongoDB através do shell do mongo. O MongoDB suporta diferentes maneiras de atualização implementadas por diversos tipos de operadores e também suporta múltiplas funções de atualização.

Preparar Dados de Teste

Inserir um lote de dados de teste na coleção de inventário.

db.inventory.insertMany( [
   { item: "tela", qty: 100, size: { h: 28, w: 35.5, uom: "cm" }, status: "A" },
   { item: "diário", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "tapete", qty: 85, size: { h: 27.9, w: 35.5, uom: "cm" }, status: "A" },
   { item: "mousepad", qty: 25, size: { h: 19, w: 22.85, uom: "cm" }, status: "P" },
   { item: "caderno", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "P" },
   { item: "papel", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
   { item: "planejador", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
   { item: "cartão postal", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" },
   { item: "caderno de esboço", qty: 80, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "bloco de esboço", qty: 95, size: { h: 22.85, w: 30.5, uom: "cm" }, status: "A" }
] );

Sintaxe do Operador de Atualização

Para atualizar documentos, o MongoDB fornece múltiplos operadores de atualização (por exemplo, $set) para modificar os valores do campo.

O formato dos parâmetros do operador de atualização é o seguinte:

{
  <operador de atualização>: { <campo1>: <valor1>, ... },
  <operador de atualização>: { <campo2>: <valor2>, ... },
  ...
}

Explicação:

  • <operador de atualização>: Operador de atualização
  • : Nome do campo
  • : Parâmetro do campo

Operador $set

Usado para atualizar documentos e criar um novo campo se o campo não existir.

Atualizando um Único Documento

Atualize um documento usando o método db.collection.updateOne().

db.inventory.updateOne(
   { item: "papel" },
   {
     $set: { "size.uom": "cm", status: "P" },
     $currentDate: { lastModified: true }
   }
)

Explicação da atualização:

  • Primeiro, recupere o primeiro documento usando a condição de consulta (item = papel).
  • Use o operador $set para atualizar o valor do campo size.uom para cm e atualizar o valor do campo status para P.
  • Use o operador $currentDate para atualizar o valor do campo lastModified para a data atual. Se o campo lastModified não existir, $currentDate criará o campo.

Atualizando Múltiplos Documentos

Use o método db.collection.updateMany() para atualizar vários documentos que atendam à condição.

db.inventory.updateMany(
   { "qty": { $lt: 50 } },
   {
     $set: { "size.uom": "in", status: "P" },
     $currentDate: { lastModified: true }
   }
)

Explicação da atualização:

  • Primeiro, recupere todos os documentos usando a condição de consulta (qty < 50).
  • Use o operador $set para atualizar o valor do campo size.uom para in e atualizar o valor do campo status para P.
  • Use o operador $currentDate para atualizar o valor do campo lastModified para a data atual. Se o campo lastModified não existir, $currentDate criará o campo.

Dica: O operador $lt representa o significado de menor que.

Substituir Documento

Utilize o método db.collection.replaceOne() para substituir o conteúdo de um documento (exceto o campo _id). O documento de substituição pode ter campos diferentes do documento original. Como o campo _id é imutável, ele pode ser omitido. No entanto, se você incluir o campo _id, o valor do id deve ser consistente com o id do documento que está sendo atualizado.

db.inventory.replaceOne(
   { item: "papel" },
   { item: "papel", estoque: [ { armazem: "A", qtde: 60 }, { armazem: "B", qtde: 40 } ] }
)

Explicação:

  • Primeiramente, utilize os critérios de consulta (item=papel) para recuperar o primeiro documento.
  • Substitua o documento correspondente com o conteúdo do segundo parâmetro do método replaceOne.

Comportamento de Atualização

Atomicidade

Todas as operações de escrita no MongoDB são atômicas no nível do documento individual.

Campo _id

O campo _id é imutável e não pode ser atualizado.