Actualización de Node.js MongoDB


Actualizar documento

Puede actualizar un registro, o documento como se llama en MongoDB, utilizando el updateOne()método.

El primer parámetro del updateOne()método es un objeto de consulta que define qué documento actualizar.

Nota: Si la consulta encuentra más de un registro, solo se actualiza la primera aparición.

El segundo parámetro es un objeto que define los nuevos valores del documento.

Ejemplo

Actualice el documento con la dirección "Valley 345" a name="Mickey" y address="Canyon 123":

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://127.0.0.1:27017/";

MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  var dbo = db.db("mydb");
  var myquery = { address: "Valley 345" };
  var newvalues = { $set: {name: "Mickey", address: "Canyon 123" } };
  dbo.collection("customers").updateOne(myquery, newvalues, function(err, res) {
    if (err) throw err;
    console.log("1 document updated");
    db.close();
  });
});

Guarde el código anterior en un archivo llamado "demo_update_one.js" y ejecute el archivo:

Ejecute "demo_update_one.js"

C:\Users\Your Name>node demo_update_one.js

Lo que te dará este resultado:

1 document updated


Actualizar solo campos específicos

Al usar el $setoperador, solo se actualizan los campos especificados:

Ejemplo

Actualice la dirección de "Valley 345" a "Canyon 123":

...
  var myquery = { address: "Valley 345" };
  var newvalues = { $set: { address: "Canyon 123" } };
  dbo.collection("customers").updateOne(myquery, newvalues, function(err, res) {
...

Actualizar muchos documentos

Para actualizar todos los documentos que cumplan con los criterios de la consulta, utilice el updateMany()método.

Ejemplo

Actualice todos los documentos donde el nombre comience con la letra "S":

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://127.0.0.1:27017/";

MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  var dbo = db.db("mydb");
  var myquery = { address: /^S/ };
  var newvalues = {$set: {name: "Minnie"} };
  dbo.collection("customers").updateMany(myquery, newvalues, function(err, res) {
    if (err) throw err;
    console.log(res.result.nModified + " document(s) updated");
    db.close();
  });
});

Guarde el código anterior en un archivo llamado "demo_update_many.js" y ejecute el archivo:

Ejecute "demo_update_many.js"

C:\Users\Your Name>node demo_update_many.js

Lo que te dará este resultado:

2 document(s) updated

El objeto de resultado

Los métodos updateOne()y updateMany()devuelven un objeto que contiene información sobre cómo la ejecución afectó a la base de datos.

No es importante comprender la mayor parte de la información, pero un objeto dentro del objeto se llama "resultado", que nos dice si la ejecución fue correcta y cuántos documentos se vieron afectados.

El objeto de resultado se ve así:

{ n: 1, nModified: 2, ok: 1 }

Puede utilizar este objeto para devolver el número de documentos actualizados:

Ejemplo

Devuelve el número de documentos actualizados:

console.log(res.result.nModified);

Lo que producirá este resultado:

2