Il $set
di MongoDB l'operatore di aggiornamento sostituisce il valore di un campo con il valore specificato.
Viene utilizzato insieme alle operazioni di aggiornamento, ad esempio quando si utilizza update()
metodo per aggiornare un documento.
Esempio
Supponiamo di avere una collezione chiamata dogs
con il seguente documento:
{ "_id" : 1, "name" : "Wag", "weight" : 20 }
E supponiamo di voler cambiare il peso del cane. Possiamo eseguire il seguente update()
comando per aggiornare il peso:
db.dogs.update(
{ _id: 1 },
{
$set: { weight: 30 }
}
)
Ciò risulterà nel seguente output:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Il che ci dice che un documento è stato abbinato e modificato.
Controlliamo la collezione:
db.dogs.find()
Risultato:
{ "_id" : 1, "name" : "Wag", "weight" : 30 }
Possiamo vedere che il peso è stato aggiornato al valore specificato.
È anche possibile aumentare i valori di un importo specifico, ma per farlo dovremmo usare il $inc
operatore invece di $set
.
Ma questo articolo riguarda il $set
operatore, quindi continuiamo.
Quando il campo non esiste
Se il campo che stai cercando di aggiornare non esiste, il campo verrà aggiunto al documento con il valore specificato.
Esempio:
db.dogs.update(
{ _id: 1 },
{
$set: { height: 40 }
}
)
Uscita:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Possiamo vedere che un documento è stato abbinato e modificato.
Controlliamo di nuovo la collezione.
db.dogs.find()
Risultato:
{ "_id" : 1, "name" : "Wag", "weight" : 30, "height" : 40 }
Quindi ora il documento include un height
campo con il valore specificato.
Documenti incorporati
È possibile aggiornare i valori nei documenti incorporati utilizzando la notazione del punto. Se il percorso specificato non esiste già, viene creato.
Esempio:
db.dogs.update(
{ _id: 1 },
{
$set: {
"meals.breakfast": "Fish",
"meals.lunch": "Chicken",
"meals.dinner": "Beef"
}
}
)
Uscita:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Usiamo findOne()
per restituire il documento:
db.dogs.findOne()
Risultato:
{ "_id" : 1, "name" : "Wag", "weight" : 30, "height" : 40, "meals" : { "breakfast" : "Fish", "dinner" : "Beef", "lunch" : "Chicken" } }
Possiamo vedere che il documento incorporato è stato aggiunto come specificato.
Array
Puoi aggiornare i dati nelle matrici usando la notazione del punto mentre specifichi l'indice dell'elemento che vuoi aggiornare.
Supponiamo di avere il seguente documento:
{ "_id" : 1, "name" : "Wag", "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] }
Aggiorniamo due degli elementi dell'array e il nome del cane.
db.dogs.update({
_id: 1
}, {
$set: {
"name": "Bark",
"awards.0": "Bottom Dog",
"awards.1": "Worst Dog"
}
})
Risultato:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Possiamo vedere che un documento è stato abbinato e modificato.
E ora guarda il documento.
db.dogs.findOne()
Risultato:
{ "_id" : 1, "name" : "Bark", "awards" : [ "Bottom Dog", "Worst Dog", "Biggest Dog" ] }