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