MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

2 начина за добавяне на стойност към масив в MongoDB

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongo – Игнорирайте собствеността, за да не бъде запазена

  2. Създаване на нови колекции Meteor в движение

  3. Съвети за стартиране на MongoDB в производството с помощта на потоци за промяна

  4. Как да конвертирам от тип данни низ към дата?

  5. връщане на документ с най-нов поддокумент само в mongodb агрегат