MongoDB $set Операторът за актуализиране заменя стойността на поле с посочената стойност.
Използва се във връзка с операции за актуализиране, например при използване на update() метод за актуализиране на документ.
Пример
Да предположим, че имаме колекция, наречена dogs със следния документ:
{ "_id" : 1, "name" : "Wag", "weight" : 20 }
И да предположим, че искаме да променим теглото на кучето. Можем да изпълним следния update() команда за актуализиране на теглото:
db.dogs.update(
{ _id: 1 },
{
$set: { weight: 30 }
}
) Това ще доведе до следния изход:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) Което ни казва, че един документ е съпоставен и променен.
Нека проверим колекцията:
db.dogs.find() Резултат:
{ "_id" : 1, "name" : "Wag", "weight" : 30 } Можем да видим, че теглото е актуализирано до посочената стойност.
Възможно е също да увеличим стойностите с определена сума, но за да направим това ще трябва да използваме $inc оператор вместо $set .
Но тази статия е за $set оператор, така че да продължим.
Когато полето не съществува
Ако полето, което се опитвате да актуализирате, не съществува, полето ще бъде добавено към документа с посочената стойност.
Пример:
db.dogs.update(
{ _id: 1 },
{
$set: { height: 40 }
}
) Изход:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) Можем да видим, че един документ е съпоставен и променен.
Нека проверим колекцията отново.
db.dogs.find() Резултат:
{ "_id" : 1, "name" : "Wag", "weight" : 30, "height" : 40 }
Така че сега документът включва height поле с посочената стойност.
Вградени документи
Можете да актуализирате стойностите във вградените документи, като използвате нотация с точки. Ако посоченият път все още не съществува, той се създава.
Пример:
db.dogs.update(
{ _id: 1 },
{
$set: {
"meals.breakfast": "Fish",
"meals.lunch": "Chicken",
"meals.dinner": "Beef"
}
}
) Изход:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Нека използваме findOne() за да върнете документа:
db.dogs.findOne() Резултат:
{
"_id" : 1,
"name" : "Wag",
"weight" : 30,
"height" : 40,
"meals" : {
"breakfast" : "Fish",
"dinner" : "Beef",
"lunch" : "Chicken"
}
} Можем да видим, че вграденият документ е добавен, както е посочено.
Масиви
Можете да актуализирате данни в масиви, като използвате нотация с точки, докато указвате индекса на елемента, който искате да актуализирате.
Да предположим, че имаме следния документ:
{
"_id" : 1,
"name" : "Wag",
"awards" : [
"Top Dog",
"Best Dog",
"Biggest Dog"
]
} Нека актуализираме два от елементите на масива и името на кучето.
db.dogs.update({
_id: 1
}, {
$set: {
"name": "Bark",
"awards.0": "Bottom Dog",
"awards.1": "Worst Dog"
}
}) Резултат:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) Можем да видим, че един документ е съпоставен и променен.
А сега погледнете документа.
db.dogs.findOne() Резултат:
{
"_id" : 1,
"name" : "Bark",
"awards" : [
"Bottom Dog",
"Worst Dog",
"Biggest Dog"
]
}