MongoDB $set
update operator erstatter værdien af et felt med den angivne værdi.
Det bruges i forbindelse med opdateringsoperationer, for eksempel ved brug af update()
metode til at opdatere et dokument.
Eksempel
Antag, at vi har en samling kaldet dogs
med følgende dokument:
{ "_id" : 1, "name" : "Wag", "weight" : 20 }
Og antag, at vi vil ændre hundens vægt. Vi kan køre følgende update()
kommando for at opdatere vægten:
db.dogs.update(
{ _id: 1 },
{
$set: { weight: 30 }
}
)
Dette vil resultere i følgende output:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Hvilket fortæller os, at ét dokument blev matchet og ændret.
Lad os tjekke samlingen:
db.dogs.find()
Resultat:
{ "_id" : 1, "name" : "Wag", "weight" : 30 }
Vi kan se, at vægten er blevet opdateret til den angivne værdi.
Det er også muligt at øge værdier med et specificeret beløb, men for at gøre det skal vi bruge $inc
operator i stedet for $set
.
Men denne artikel handler om $set
operatør, så lad os fortsætte.
Når feltet ikke eksisterer
Hvis feltet, du forsøger at opdatere, ikke eksisterer, føjes feltet til dokumentet med den angivne værdi.
Eksempel:
db.dogs.update(
{ _id: 1 },
{
$set: { height: 40 }
}
)
Output:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Vi kan se, at ét dokument blev matchet og ændret.
Lad os tjekke samlingen igen.
db.dogs.find()
Resultat:
{ "_id" : 1, "name" : "Wag", "weight" : 30, "height" : 40 }
Så nu indeholder dokumentet en height
felt med den angivne værdi.
Indlejrede dokumenter
Du kan opdatere værdier i indlejrede dokumenter ved at bruge punktnotation. Hvis den angivne sti ikke allerede eksisterer, oprettes den.
Eksempel:
db.dogs.update(
{ _id: 1 },
{
$set: {
"meals.breakfast": "Fish",
"meals.lunch": "Chicken",
"meals.dinner": "Beef"
}
}
)
Output:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Lad os bruge findOne()
for at returnere dokumentet:
db.dogs.findOne()
Resultat:
{ "_id" : 1, "name" : "Wag", "weight" : 30, "height" : 40, "meals" : { "breakfast" : "Fish", "dinner" : "Beef", "lunch" : "Chicken" } }
Vi kan se, at det indlejrede dokument er blevet tilføjet som angivet.
Arrays
Du kan opdatere data i arrays ved at bruge punktnotation, mens du angiver indekset for det element, du vil opdatere.
Antag, at vi har følgende dokument:
{ "_id" : 1, "name" : "Wag", "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] }
Lad os opdatere to af array-elementerne og hundens navn.
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, at ét dokument blev matchet og ændret.
Og se nu på dokumentet.
db.dogs.findOne()
Resultat:
{ "_id" : 1, "name" : "Bark", "awards" : [ "Bottom Dog", "Worst Dog", "Biggest Dog" ] }