Ако имате колекция от документи в MongoDB, които съдържат масиви, можете да добавите нови стойности към тези масиви, ако е необходимо.
В зависимост от вашите специфични изисквания, можете да използвате $push
оператор или $addToSet
оператор.
$push
Оператор
Да предположим, че имаме колекция, наречена products
със следните документи:
{ "_id" :1, "продукт" :"Прилеп", "размери" :[ "S", "M", "L" ] }{ "_id" :2, "продукт" :"Шапка" , "размери" :[ "S", "L", "XL" ] }{ "_id" :3, "продукт" :"Капачка", "размери" :[ "M", "L" ] }предварително>И да кажем, че искаме да добавим стойност към масива в документ 3.
Можем да използваме
$push
във връзка сupdate()
за да добавите стойността:db.products.update( { _id: 3 }, { $push: { sizes: "XL" } } )
Нека отново да разгледаме колекцията, за да проверим промяната:
db.products.find()
Резултат:
{ "_id" :1, "продукт" :"Прилеп", "размери" :[ "S", "M", "L" ] }{ "_id" :2, "продукт" :"Шапка" , "размери" :[ "S", "L", "XL" ] }{ "_id" :3, "продукт" :"Капачка", "размери" :[ "M", "L", "XL" ] }Можем да видим, че стойността
XL
е добавен към масива в документ 3.
$push
Операторът може да се използва и с различни модификатори, като$position
,$sort
и$slice
.Можете също да добавите множество стойности към масива, като използвате
$each
модификатор.Вижте MongoDB
$push
за примери.
$addToSet
Оператор
$addToSet
Операторът работи по подобен начин на$push
, с изключение на няколко неща:
- Ако стойността, която се опитвате да добавите, вече съществува в масива, тя няма да бъде добавена.
$position
,$sort
и$slice
модификаторите не могат да се използват с$addToSet
.
Да предположим, че нашата колекция изглежда така:
{ "_id" :1, "product" :"Прилеп", "sizes" :[ "S", "M", "L", "XL" ] }{ "_id" :2, "product" :"Шапка", "размери" :[ "S", "L", "XL" ] }{ "_id" :3, "продукт" :"Капачка", "размери" :[ "S", "M" , "L", "XL" ] }
Нека вмъкнем множество стойности в масива в документ 2:
db.products.update(
{ _id: 2 },
{
$addToSet: {
sizes: {
$each: [ "XXL", "XXXL" ]
}
}
}
)
Сега нека проверим колекцията отново:
db.products.find()
Резултат:
{ "_id" :1, "product" :"Прилеп", "sizes" :[ "S", "M", "L", "XL" ] }{ "_id" :2, "product" :"Шапка", "размери" :[ "S", "L", "XL", "XXL", "XXXL" ] }{ "_id" :3, "продукт" :"Капачка", "размери" :[ „S“, „M“, „L“, „XL“ ] }
Можем да видим, че двете стойности бяха добавени към масива в документ 2, както се очакваше.
Този пример използва $each
модификатор, който можете да използвате и с $push
оператор.
Използвах само $each
модификатор, защото добавях няколко стойности. Ако използвах само една стойност, можех да пропусна $each
модификатор, а синтаксисът би изглеждал повече като горния $push
пример.
Както споменахме, ако стойността вече съществува, тя няма да бъде добавена. Освен това и с двата оператора, ако добавите масив, целият масив ще бъде добавен като отделна стойност в рамките на съществуващия масив.
Вижте MongoDB $addToSet
за още примери.