MongoDB $set
update operator ersätter värdet på ett fält med det angivna värdet.
Den används i samband med uppdateringsoperationer, till exempel när du använder update()
metod för att uppdatera ett dokument.
Exempel
Anta att vi har en samling som heter dogs
med följande dokument:
{ "_id" : 1, "name" : "Wag", "weight" : 20 }
Och anta att vi vill ändra hundens vikt. Vi kan köra följande update()
kommando för att uppdatera vikten:
db.dogs.update(
{ _id: 1 },
{
$set: { weight: 30 }
}
)
Detta kommer att resultera i följande utdata:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Vilket säger oss att ett dokument matchades och modifierades.
Låt oss kolla samlingen:
db.dogs.find()
Resultat:
{ "_id" : 1, "name" : "Wag", "weight" : 30 }
Vi kan se att vikten har uppdaterats till det angivna värdet.
Det är också möjligt att öka värden med ett specificerat belopp, men för att göra det måste vi använda $inc
operator istället för $set
.
Men den här artikeln handlar om $set
operatör, så låt oss fortsätta.
När fältet inte finns
Om fältet som du försöker uppdatera inte finns, läggs fältet till i dokumentet med det angivna värdet.
Exempel:
db.dogs.update(
{ _id: 1 },
{
$set: { height: 40 }
}
)
Utdata:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Vi kan se att ett dokument matchades och modifierades.
Låt oss kolla in samlingen igen.
db.dogs.find()
Resultat:
{ "_id" : 1, "name" : "Wag", "weight" : 30, "height" : 40 }
Så nu innehåller dokumentet en height
fältet med det angivna värdet.
Inbäddade dokument
Du kan uppdatera värden i inbäddade dokument genom att använda punktnotation. Om den angivna sökvägen inte redan finns skapas den.
Exempel:
db.dogs.update(
{ _id: 1 },
{
$set: {
"meals.breakfast": "Fish",
"meals.lunch": "Chicken",
"meals.dinner": "Beef"
}
}
)
Utdata:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Låt oss använda findOne()
för att returnera dokumentet:
db.dogs.findOne()
Resultat:
{ "_id" : 1, "name" : "Wag", "weight" : 30, "height" : 40, "meals" : { "breakfast" : "Fish", "dinner" : "Beef", "lunch" : "Chicken" } }
Vi kan se att det inbäddade dokumentet har lagts till som specificerat.
Arrayer
Du kan uppdatera data i arrayer genom att använda punktnotation samtidigt som du anger indexet för det element som du vill uppdatera.
Anta att vi har följande dokument:
{ "_id" : 1, "name" : "Wag", "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] }
Låt oss uppdatera två av arrayelementen och hundens namn.
db.dogs.update({
_id: 1
}, {
$set: {
"name": "Bark",
"awards.0": "Bottom Dog",
"awards.1": "Worst Dog"
}
})
Resultat:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Vi kan se att ett dokument matchades och modifierades.
Och titta nu på dokumentet.
db.dogs.findOne()
Resultat:
{ "_id" : 1, "name" : "Bark", "awards" : [ "Bottom Dog", "Worst Dog", "Biggest Dog" ] }