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"
]
}