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

MongoDB $push

В MongoDB можете да използвате $push оператор за добавяне на стойност към масив.

Можете да използвате различни модификатори, за да посочите позицията на стойността в масива, реда на елементите в масива, да добавите множество стойности и т.н.

Пример

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

db.products.find() 

Резултат:

{ "_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" } }
) 

Изход:

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

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

db.products.find() 

Резултат:

{ "_id" :1, "продукт" :"Прилеп", "размери" :[ "S", "M", "L" ] }{ "_id" :2, "продукт" :"Шапка" , "размери" :[ "S", "L", "XL" ] }{ "_id" :3, "продукт" :"Капачка", "размери" :[ "M", "L", "XL" ] }

Вмъкнете стойността на определена позиция

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

Например, можем да използваме стойност от 0 за да го вмъкнете в началото на масива.

Пример:

db.products.update(
   { _id: 3 },
   { 
     $push: { 
        sizes: {
           $each: [ "S" ],
           $position: 0
        }
      } 
    }
) 

Изход:

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

$each модификаторът добавя множество стойности към полето на масива. В този случай обаче вмъкнахме само една стойност в масива, за да използваме $position модификатор, той трябва да се появи с $each модификатор.

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

db.products.find() 

Резултат:

{ "_id" :1, "продукт" :"Прилеп", "размери" :[ "S", "M", "L" ] }{ "_id" :2, "продукт" :"Шапка" , "размери" :[ "S", "L", "XL" ] }{ "_id" :3, "продукт" :"Капачка", "размери" :[ "S", "M", "L" , "XL" ] }

Добавяне и сортиране

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

db.players.find() 

Резултат:

{ "_id" :1, "резултати" :[ 1, 5, 3 ] }{ "_id" :2, "резултати" :[ 8, 17, 18 ] }{ "_id" :3, "резултати " :[ 15, 11, 8 ] }

И да предположим, че искаме да добавим някои стойности към масива в документ 3, но също така искаме да сортираме масива във възходящ ред, след като сме добавили стойността.

Можем да направим това:

db.players.update(
   { _id: 3 },
   { 
     $push: { 
        scores: {
           $each: [ 5, 12 ],
           $sort: 1
        }
      } 
    }
) 

Изход:

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

Сега, когато прегледаме колекцията, можем да видим, че третият документ е съответно променен.

db.players.find() 

Резултат:

{ "_id" :1, "резултати" :[ 1, 5, 3 ] }{ "_id" :2, "резултати" :[ 8, 17, 18 ] }{ "_id" :3, "резултати " :[ 5, 8, 11, 12, 15 ] }

За да го сортирате в низходящ ред, използвайте $sort: -1 .

Нарежете масива

Можете да използвате $slice модификатор за ограничаване на броя на елементите в масива.

Например, нека добавим друга стойност към масива, но след това да нарежем масива на определен брой елементи.

db.players.update(
   { _id: 3 },
   { 
     $push: { 
        scores: {
           $each: [ 3 ],
           $slice: 3
        }
      } 
    }
) 

Изход:

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

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

db.players.find() 

Резултат:

{ "_id" :1, "резултати" :[ 1, 5, 3 ] }{ "_id" :2, "резултати" :[ 8, 17, 18 ] }{ "_id" :3, "резултати " :[ 5, 8, 11 ] }

В този случай масивът беше нарязан, но стойността, която добавихме, дори не се оказа в крайния масив. Това е така, защото стойността беше добавена към масива и ние не използвахме $sort операция и така стойността остава в края на масива, преди масивът да бъде нарязан на първите му три елемента.

Ето го отново, освен този път с $sort модификатор.

db.players.update(
   { _id: 3 },
   { 
     $push: { 
        scores: {
           $each: [ 3 ],
           $sort: 1,
           $slice: 3
        }
      } 
    }
) 

Изход:

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

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

db.players.find() 

Резултат:

{ "_id" :1, "резултати" :[ 1, 5, 3 ] }{ "_id" :2, "резултати" :[ 8, 17, 18 ] }{ "_id" :3, "резултати " :[ 3, 5, 8 ] }

Добавяне на стойност само ако тя не съществува

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. VersionError:Няма намерен съответстващ документ грешка в Node.js/Mongoose

  2. Как да създадете индекс със специфично име в MongoDB

  3. Как да направя вложено $lookup търсене в MongoDB?

  4. Как да заредя база данни mongo с помощта на docker-compose?

  5. 3 начина за създаване на индекс в MongoDB