MongoDB $set
Operátor aktualizace nahradí hodnotu pole zadanou hodnotou.
Používá se ve spojení s operacemi aktualizace, například při použití update()
způsob aktualizace dokumentu.
Příklad
Předpokládejme, že máme sbírku nazvanou dogs
s následujícím dokumentem:
{ "_id" : 1, "name" : "Wag", "weight" : 20 }
A předpokládejme, že chceme změnit váhu psa. Můžeme spustit následující update()
příkaz pro aktualizaci hmotnosti:
db.dogs.update(
{ _id: 1 },
{
$set: { weight: 30 }
}
)
Výsledkem bude následující výstup:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Což nám říká, že jeden dokument byl spárován a upraven.
Podívejme se na sbírku:
db.dogs.find()
Výsledek:
{ "_id" : 1, "name" : "Wag", "weight" : 30 }
Vidíme, že váha byla aktualizována na zadanou hodnotu.
Je také možné zvýšit hodnoty o zadanou částku, ale k tomu bychom museli použít $inc
operátor namísto $set
.
Ale tento článek je celý o $set
operátora, takže pokračujme.
Když pole neexistuje
Pokud pole, které se pokoušíte aktualizovat, neexistuje, bude pole přidáno do dokumentu se zadanou hodnotou.
Příklad:
db.dogs.update(
{ _id: 1 },
{
$set: { height: 40 }
}
)
Výstup:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Vidíme, že jeden dokument byl spárován a upraven.
Podívejme se znovu na sbírku.
db.dogs.find()
Výsledek:
{ "_id" : 1, "name" : "Wag", "weight" : 30, "height" : 40 }
Nyní tedy dokument obsahuje height
pole se zadanou hodnotou.
Vložené dokumenty
Hodnoty ve vložených dokumentech můžete aktualizovat pomocí tečkové notace. Pokud zadaná cesta ještě neexistuje, je vytvořena.
Příklad:
db.dogs.update(
{ _id: 1 },
{
$set: {
"meals.breakfast": "Fish",
"meals.lunch": "Chicken",
"meals.dinner": "Beef"
}
}
)
Výstup:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Použijme findOne()
pro vrácení dokumentu:
db.dogs.findOne()
Výsledek:
{ "_id" : 1, "name" : "Wag", "weight" : 30, "height" : 40, "meals" : { "breakfast" : "Fish", "dinner" : "Beef", "lunch" : "Chicken" } }
Vidíme, že vložený dokument byl přidán podle specifikace.
Pole
Data v polích můžete aktualizovat pomocí tečkové notace při zadávání indexu prvku, který chcete aktualizovat.
Předpokládejme, že máme následující dokument:
{ "_id" : 1, "name" : "Wag", "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] }
Pojďme aktualizovat dva prvky pole a jméno psa.
db.dogs.update({
_id: 1
}, {
$set: {
"name": "Bark",
"awards.0": "Bottom Dog",
"awards.1": "Worst Dog"
}
})
Výsledek:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Vidíme, že jeden dokument byl spárován a upraven.
A teď se podívejte na dokument.
db.dogs.findOne()
Výsledek:
{ "_id" : 1, "name" : "Bark", "awards" : [ "Bottom Dog", "Worst Dog", "Biggest Dog" ] }