Atualizado: 02/01/2025

Atualizando Documentos no MongoDB - 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