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