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.