Ако имате колекция от документи в 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 за още примери.