Aggiornamento dei dati del documento MongoDB utilizzando mongo shell

Questa sezione introduce l'aggiornamento dei dati del documento MongoDB tramite la shell mongo. MongoDB supporta diversi metodi di aggiornamento implementati da vari tipi di operatori e supporta anche diverse funzioni di aggiornamento.

Preparare i dati di prova

Inserire una serie di dati di prova nella raccolta di inventario.

db.inventory.insertMany( [
   { item: "tela", qty: 100, size: { h: 28, w: 35.5, uom: "cm" }, status: "A" },
   { item: "giornale", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "tappetino", qty: 85, size: { h: 27.9, w: 35.5, uom: "cm" }, status: "A" },
   { item: "tappetino per mouse", qty: 25, size: { h: 19, w: 22.85, uom: "cm" }, status: "P" },
   { item: "quaderno", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "P" },
   { item: "carta", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
   { item: "agenda", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
   { item: "cartolina", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" },
   { item: "blocco per disegno", qty: 80, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "blocco per schizzi", qty: 95, size: { h: 22.85, w: 30.5, uom: "cm" }, status: "A" }
] );

Sintassi dell'operatore di aggiornamento

Per aggiornare i documenti, MongoDB fornisce diversi operatori di aggiornamento (ad esempio, $set) per modificare i valori dei campi.

Il formato dei parametri dell'operatore di aggiornamento è il seguente:

{
  <operatore di aggiornamento>: { <campo1>: <valore1>, ... },
  <operatore di aggiornamento>: { <campo2>: <valore2>, ... },
  ...
}

Spiegazione:

  • : Operatore di aggiornamento
  • : Nome del campo
  • : Parametro del campo

Operatore $set

Utilizzato per aggiornare i documenti e creare un nuovo campo se il campo non esiste.

Aggiornamento di un singolo documento

Aggiornare un documento utilizzando il metodo db.collection.updateOne().

db.inventory.updateOne(
   { item: "carta" },
   {
     $set: { "size.uom": "cm", status: "P" },
     $currentDate: { lastModified: true }
   }
)

Spiegazione dell'aggiornamento:

  • Prima di tutto, recuperare il primo documento utilizzando la condizione di query (item = carta).
  • Utilizzare l'operatore $set per aggiornare il valore del campo size.uom a cm e aggiornare il valore del campo status a P.
  • Utilizzare l'operatore $currentDate per aggiornare il valore del campo lastModified alla data corrente. Se il campo lastModified non esiste, $currentDate creerà il campo.

Aggiornamento di più documenti

Utilizzare il metodo db.collection.updateMany() per aggiornare più documenti che soddisfano la condizione.

db.inventory.updateMany(
   { "qty": { $lt: 50 } },
   {
     $set: { "size.uom": "in", status: "P" },
     $currentDate: { lastModified: true }
   }
)

Spiegazione dell'aggiornamento:

  • Innanzitutto recuperare tutti i documenti utilizzando la condizione di query (qty < 50).
  • Utilizzare l'operatore $set per aggiornare il valore del campo size.uom a in e aggiornare il valore del campo status a P.
  • Utilizzare l'operatore $currentDate per aggiornare il valore del campo lastModified alla data corrente. Se il campo lastModified non esiste, $currentDate creerà il campo.

Suggerimento: L'operatore $lt rappresenta il significato di minore di.

Sostituire un Documento

Utilizza il metodo db.collection.replaceOne() per sostituire il contenuto di un documento (ad eccezione del campo _id). Il documento di sostituzione può avere campi diversi rispetto al documento originale. Poiché il campo _id è immutabile, può essere omesso. Tuttavia, se includi il campo _id, il valore dell'ID deve essere coerente con l'ID del documento in fase di aggiornamento.

db.inventory.replaceOne(
   { item: "carta" },
   { item: "carta", disponibile: [ { magazzino: "A", qtà: 60 }, { magazzino: "B", qtà: 40 } ] }
)

Spiegazione:

  • Prima, utilizza i criteri di query (item=carta) per recuperare il primero documento.
  • Sostituisci il documento corrispondente con il contenuto del secondo parametro del metodo replaceOne.

Comportamento dell'Aggiornamento

Atomicità

Tutte le operazioni di scrittura in MongoDB sono atomiche a livello del singolo documento.

Campo _id

Il campo _id è immutabile e non può essere aggiornato.