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

MongoDB $addToSet

В MongoDB, $addToSet оператор добавя стойност към масив, освен ако стойността вече не присъства в масива.

Това е подобно на $push оператор, с изключение на $push добавя стойността, дори ако стойността вече е налице.

Пример

Да предположим, че имаме колекция, наречена products със следните документи:

db.products.find()

Резултат:

{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L" ] }
{ "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "product" : "Cap", "sizes" : [ "S", "M", "L", "XL" ] }

Можем да използваме $addToSet за да добавите стойност към един от тези масиви.

Пример:

db.products.update(
   { _id: 1 },
   { $addToSet: { sizes: "XL" } }
)

Изход:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Нека да разгледаме отново нашата колекция, за да проверим промяната:

db.products.find()

Резултат:

{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] }
{ "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "product" : "Cap", "sizes" : [ "S", "M", "L", "XL" ] }

Дублиращи се стойности

Ако се опитате да вмъкнете стойност, която вече съществува в масива, нищо не се случва. С други думи, $addToSet вмъква стойността само ако тя вече не съществува.

Ето пример за опит за вмъкване на стойност, която вече съществува.

db.products.update(
   { _id: 1 },
   { $addToSet: { sizes: "XL" } }
)

Изход:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })

Това съобщение ни казва, че е имало един съответстващ документ (т.е. документът с _id от 1 ), но нямаше промени.

В предишния пример видяхме "nModified" : 1 , но в този пример виждаме "nModified" : 0 . Това е така, защото стойността не е съществувала, когато я вмъкнахме в предишния пример, но в този пример вече съществува.

Можем да проверим това, като разгледаме колекцията отново:

db.products.find()

Резултат:

{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] }
{ "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "product" : "Cap", "sizes" : [ "S", "M", "L", "XL" ] }

Добавяне на множество стойности

Можете да използвате $each модификатор за добавяне на множество стойности към масив.

Пример:

db.products.update(
   { _id: 2 },
   { 
     $addToSet: { 
        sizes: {
           $each: [ "XXL", "XXXL" ]
        }
      } 
    }
)

Изход:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Сега нека проверим колекцията отново:

db.products.find()

Резултат:

{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] }
{ "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL", "XXL", "XXXL" ] }
{ "_id" : 3, "product" : "Cap", "sizes" : [ "S", "M", "L", "XL" ] }

Можем да видим, че двете стойности бяха добавени към масива в документ 2, както се очакваше.

Добавяне на масив към масива

Можете също да добавите цял масив към масива. Когато направите това, целият масив се добавя като негов отделен масив.

Да предположим, че имаме колекция като тази:

db.foo.find()

Резултат:

{ "_id" : 1, "bar" : [ 1, 5, 3 ] }
{ "_id" : 2, "bar" : [ 8, 17, 18 ] }
{ "_id" : 3, "bar" : [ 15, 11, 8 ] }

Можем да добавим масив към масив като този:

db.foo.update(
   { _id: 1 },
   { $addToSet: { bar: [ 7, 8, 9] } }
)

Изход:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Проверете колекцията:

db.foo.find()

Резултат:

{ "_id" : 1, "bar" : [ 1, 5, 3, [ 7, 8, 9 ] ] }
{ "_id" : 2, "bar" : [ 8, 17, 18 ] }
{ "_id" : 3, "bar" : [ 15, 11, 8 ] }


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. 10 въпроса, които да зададете (и да отговорите), когато хоствате MongoDB на AWS

  2. Индексиране на мангуста в производствения код

  3. Проверете дали всеки елемент в масива отговаря на условието

  4. MongoDB връща True, ако документът съществува

  5. MongoDB $ седмица