Atualizado: 21/06/2025

Este conteúdo é original e não foi gerado por inteligência artificial.

Atualizando Documentos no MongoDB com Node.js

Para atualizar elementos no MongoDB, há vários métodos disponíveis:

  • findOneAndUpdate: Atualiza um documento que corresponde ao critério de filtro e retorna o documento atualizado.
  • updateOne: Atualiza um documento que corresponde ao critério de filtro e retorna informações sobre a operação de atualização.
  • updateMany: Atualiza todos os documentos que correspondem ao critério de filtro e retorna informações sobre a operação de atualização.

findOneAndUpdate

O método findOneAndUpdate() atualiza um elemento e aceita os seguintes parâmetros:

  • Critério de filtro do documento a ser atualizado.
  • Parâmetro de atualização.
  • Opções adicionais de atualização, que por padrão têm valor null.
  • Função de callback que é executada ao concluir a atualização.

Por exemplo, vamos atualizar o primeiro usuário no banco de dados que tenha 21 anos:

const MongoClient = require("mongodb").MongoClient;

const url = "mongodb://127.0.0.1:27017/";
const mongoClient = new MongoClient(url);

async function run() {
  const users = [
    { name: "Bob", age: 34 },
    { name: "Alice", age: 21 },
    { name: "Tom", age: 45 },
  ];
  try {
    await mongoClient.connect();
    const db = mongoClient.db("usersdb");
    const collection = db.collection("users");
    await collection.insertMany(users);
    const result = await collection.findOneAndUpdate({ age: 21 }, { $set: { age: 25 } });
    console.log(result);
  } catch (err) {
    console.log(err);
  } finally {
    await mongoClient.close();
  }
}
run().catch(console.error);

Neste exemplo, adicionamos 3 usuários no banco de dados e depois atualizamos um deles.

Para a atualização, usamos o objeto { $set: {age: 25}}. O parâmetro $set permite atualizar valores de um campo ou grupo de campos. Neste caso, estamos alterando o campo age:

const result = await collection.findOneAndUpdate({ age: 21 }, { $set: { age: 25 } });

O método findOneAndUpdate() retorna o documento atualizado. Por padrão, retorna o estado antigo do documento modificado:

c:\node\mongoapp>node app
{
  _id: new ObjectId("6112ad050d15a6dfd6330280"),
  name: "Alice",
  age: 21
}

Obtendo o Novo Estado do Documento Atualizado

Se quisermos obter o novo estado do documento modificado após a atualização, podemos usar a opção adicional returnDocument: "after", que indica que devemos receber o novo estado do documento. Por padrão, este parâmetro é before (ou seja, retorna o estado do documento antes da atualização):

const MongoClient = require("mongodb").MongoClient;

const url = "mongodb://127.0.0.1:27017/";
const mongoClient = new MongoClient(url);

async function run() {
  try {
    await mongoClient.connect();
    const db = mongoClient.db("usersdb");
    const collection = db.collection("users");
    const result = await collection.findOneAndUpdate({ name: "Bob" }, { $set: { name: "Sam" } }, { returnDocument: "after" });
    console.log(result);
  } catch (err) {
    console.log(err);
  } finally {
    await mongoClient.close();
  }
}
run().catch(console.error);

Saída do console:

c:\node\mongoapp>node app
{
  _id: new ObjectId("6113c6c7ed15a6dfd633024e4"),
  name: "Sam",
  age: 34
}

updateMany

O método xw permite atualizar todos os documentos na coleção que correspondem ao critério de filtro:

const MongoClient = require("mongodb").MongoClient;

const url = "mongodb://127.0.0.1:27017/";
const mongoClient = new MongoClient(url);

async function run() {
  try {
    await mongoClient.connect();
    const db = mongoClient.db("usersdb");
    const collection = db.collection("users");
    const result = await collection.updateMany({ name: "Sam" }, { $set: { name: "Bob" } });
    console.log(result);
  } catch (err) {
    console.log(err);
  } finally {
    await mongoClient.close();
  }
}
run().catch(console.error);

O método updateMany retorna um objeto descrevendo o resultado da atualização:

{
  "acknowledged": true,
  "modifiedCount": 1,
  "upsertedId": null,
  "upsertedCount": 0,
  "matchedCount": 1
}

A propriedade modifiedCount indica a quantidade de documentos modificados. A propriedade upsertedId contém o id do documento adicionado (para operações de substituição com adição). A propriedade upsertedCount indica a quantidade de linhas adicionadas. E a propriedade matchedCount mostra a quantidade de documentos que correspondem ao critério de filtro.

updateOne

O método updateOne() é semelhante ao updateMany, exceto que atualiza apenas um elemento. Ao contrário do método findOneAndUpdate(), ele não retorna o documento modificado:

const MongoClient = require("mongodb").MongoClient;

const url = "mongodb://127.0.0.1:27017/";
const mongoClient = new MongoClient(url);

async function run() {
  try {
    await mongoClient.connect();
    const db = mongoClient.db("usersdb");
    const collection = db.collection("users");
    const result = await collection.updateOne({ name: "Tom" }, { $set: { name: "Tom Junior", age: 33 } });
    console.log(result);
  } catch (err) {
    console.log(err);
  } finally {
    await mongoClient.close();
  }
}
run().catch(console.error);
Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com