De MongoDB $set
update-operator vervangt de waarde van een veld door de opgegeven waarde.
Het wordt gebruikt in combinatie met update-bewerkingen, bijvoorbeeld bij het gebruik van de update()
methode om een document bij te werken.
Voorbeeld
Stel dat we een verzameling hebben met de naam dogs
met het volgende document:
{ "_id" : 1, "name" : "Wag", "weight" : 20 }
En stel dat we het gewicht van de hond willen veranderen. We kunnen de volgende update()
. uitvoeren commando om het gewicht bij te werken:
db.dogs.update(
{ _id: 1 },
{
$set: { weight: 30 }
}
)
Dit resulteert in de volgende uitvoer:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Wat ons vertelt dat één document is gematcht en aangepast.
Laten we de collectie eens bekijken:
db.dogs.find()
Resultaat:
{ "_id" : 1, "name" : "Wag", "weight" : 30 }
We kunnen zien dat het gewicht is bijgewerkt naar de opgegeven waarde.
Het is ook mogelijk om waarden met een bepaald bedrag te verhogen, maar daarvoor moeten we de $inc
gebruiken operator in plaats van $set
.
Maar dit artikel gaat helemaal over de $set
operator, dus laten we doorgaan.
Als het veld niet bestaat
Als het veld dat u probeert bij te werken niet bestaat, wordt het veld toegevoegd aan het document met de opgegeven waarde.
Voorbeeld:
db.dogs.update(
{ _id: 1 },
{
$set: { height: 40 }
}
)
Uitgang:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
We kunnen zien dat één document is gematcht en gewijzigd.
Laten we de collectie nog eens bekijken.
db.dogs.find()
Resultaat:
{ "_id" : 1, "name" : "Wag", "weight" : 30, "height" : 40 }
Dus nu bevat het document een height
veld met de opgegeven waarde.
Ingesloten documenten
U kunt waarden in ingesloten documenten bijwerken met behulp van puntnotatie. Als het opgegeven pad nog niet bestaat, wordt het gemaakt.
Voorbeeld:
db.dogs.update(
{ _id: 1 },
{
$set: {
"meals.breakfast": "Fish",
"meals.lunch": "Chicken",
"meals.dinner": "Beef"
}
}
)
Uitgang:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Laten we findOne()
. gebruiken om het document terug te sturen:
db.dogs.findOne()
Resultaat:
{ "_id" : 1, "name" : "Wag", "weight" : 30, "height" : 40, "meals" : { "breakfast" : "Fish", "dinner" : "Beef", "lunch" : "Chicken" } }
We kunnen zien dat het ingesloten document is toegevoegd zoals gespecificeerd.
Arrays
U kunt gegevens in arrays bijwerken door puntnotatie te gebruiken terwijl u de index opgeeft van het element dat u wilt bijwerken.
Stel dat we het volgende document hebben:
{ "_id" : 1, "name" : "Wag", "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] }
Laten we twee van de array-elementen en de naam van de hond bijwerken.
db.dogs.update({
_id: 1
}, {
$set: {
"name": "Bark",
"awards.0": "Bottom Dog",
"awards.1": "Worst Dog"
}
})
Resultaat:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
We kunnen zien dat één document is gematcht en gewijzigd.
En kijk nu naar het document.
db.dogs.findOne()
Resultaat:
{ "_id" : 1, "name" : "Bark", "awards" : [ "Bottom Dog", "Worst Dog", "Biggest Dog" ] }