Aggiornamento di Node.js MongoDB


Aggiorna documento

Puoi aggiornare un record, o un documento come viene chiamato in MongoDB, usando il updateOne()metodo.

Il primo parametro del updateOne()metodo è un oggetto query che definisce quale documento aggiornare.

Nota: se la query trova più di un record, viene aggiornata solo la prima occorrenza.

Il secondo parametro è un oggetto che definisce i nuovi valori del documento.

Esempio

Aggiorna il documento con l'indirizzo "Valley 345" in name="Mickey" e 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();
  });
});

Salva il codice sopra in un file chiamato "demo_update_one.js" ed esegui il file:

Esegui "demo_update_one.js"

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

Che ti darà questo risultato:

1 document updated


Aggiorna solo campi specifici

Quando si utilizza l' $setoperatore, vengono aggiornati solo i campi specificati:

Esempio

Aggiorna l'indirizzo da "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) {
...

Aggiorna molti documenti

Per aggiornare tutti i documenti che soddisfano i criteri della query, utilizzare il updateMany()metodo.

Esempio

Aggiorna tutti i documenti in cui il nome inizia con la lettera "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();
  });
});

Salva il codice sopra in un file chiamato "demo_update_many.js" ed esegui il file:

Esegui "demo_update_many.js"

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

Che ti darà questo risultato:

2 document(s) updated

L'oggetto risultato

I metodi updateOne()e updateMany()restituiscono un oggetto che contiene informazioni su come l'esecuzione ha influenzato il database.

La maggior parte delle informazioni non è importante da capire, ma un oggetto all'interno dell'oggetto è chiamato "risultato" che ci dice se l'esecuzione è andata bene e quanti documenti sono stati interessati.

L'oggetto risultato è simile a questo:

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

Puoi utilizzare questo oggetto per restituire il numero di documenti aggiornati:

Esempio

Restituire il numero di documenti aggiornati:

console.log(res.result.nModified);

Che produrrà questo risultato:

2