Atualizando Documentos no MongoDB - Node.js
Para atualizar elementos no MongoDB, há vários métodos disponíveis:
: Atualiza um documento que corresponde ao critério de filtro e retorna o documento atualizado.findOneAndUpdate
: Atualiza um documento que corresponde ao critério de filtro e retorna informações sobre a operação de atualização.updateOne
: Atualiza todos os documentos que correspondem ao critério de filtro e retorna informações sobre a operação de atualização.updateMany
findOneAndUpdate
O método findOneAndUpdate()
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}}
$set
age
const result = await collection.findOneAndUpdate({age: 21}, { $set: {age: 25}});
O método findOneAndUpdate()
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"
before
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
{ "acknowledged": true, "modifiedCount": 1, "upsertedId": null, "upsertedCount": 0, "matchedCount": 1 }
A propriedade modifiedCount
upsertedId
upsertedCount
matchedCount
updateOne
O método updateOne()
updateMany
findOneAndUpdate()
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);