V MongoDB můžete použít $push operátor k připojení hodnoty k poli.
Tento operátor lze použít s různými modifikátory, jedním z nich je $position modifikátor. $position modifikátor umožňuje určit pozici v poli, do které chcete vložit novou hodnotu.
Přidat hodnotu na začátek pole
Předpokládejme, že máme následující kolekci:
{ "_id" :1, "prod" :"Bat", "sizes" :[ "S", "M", "XL" ] }{ "_id" :2, "prod" :"Klobouk" , "velikosti" :[ "S", "L", "XL" ] }{ "_id" :3, "prod" :"Kšiltovka", "velikosti" :[ "M", "L" ] }
A předpokládejme, že chceme přidat hodnotu na začátek pole v dokumentu 3.
Můžeme to udělat:
db.products.update(
{ _id: 3 },
{
$push: {
sizes: {
$each: [ "S" ],
$position: 0
}
}
}
)
Nyní znovu zkontrolujeme sbírku:
db.products.find()
Výsledek:
{ "_id" :1, "prod" :"Bat", "sizes" :[ "S", "M", "XL" ] }{ "_id" :2, "prod" :"Klobouk" , "velikosti" :[ "S", "L", "XL" ] }{ "_id" :3, "prod" :"Kšiltovka", "velikosti" :[ "S", "M", "L" ] }
Pole jsou založeny na nule, takže position: 0 přidá hodnotu jako první prvek v poli.
Přidat hodnotu do středu pole
Předpokládejme, že chceme přidat hodnotu M do dokumentu 2 a chceme, aby to bylo mezi S a L .
Zde je návod, jak to udělat:
db.products.update(
{ _id: 2 },
{
$push: {
sizes: {
$each: [ "M" ],
$position: 1
}
}
}
)
Nyní znovu zkontrolujeme sbírku:
db.products.find()
Výsledek:
{ "_id" :1, "prod" :"Bat", "sizes" :[ "S", "M", "XL" ] }{ "_id" :2, "prod" :"Klobouk" , "velikosti" :[ "S", "M", "L", "XL" ] }{ "_id" :3, "prod" :"Kšiltovka", "velikosti" :[ "S", "M" , "L" ] }
Použili jsme $position: 1 , protože to je pozice, kterou jsme chtěli M jít (tj. druhá pozice).
Záporné hodnoty
Můžete také zadat zápornou hodnotu jako pozici. Když to uděláte, hodnota se vloží na zadanou zápornou pozici a počítá se zpět od konce.
Předpokládejme, že chceme vložit L mezi M a XL v dokumentu 1.
Zde je návod, jak na to použijeme zápornou pozici:
db.products.update(
{ _id: 1 },
{
$push: {
sizes: {
$each: [ "L" ],
$position: -1
}
}
}
)
Zkontrolujte výsledek:
db.products.find()
Výsledek:
{ "_id" :1, "prod" :"Bat", "sizes" :[ "S", "M", "L", "XL" ] }{ "_id" :2, "prod" :"Klobouk", "velikosti" :[ "S", "M", "L", "XL" ] }{ "_id" :3, "prod" :"Čepice", "velikosti" :[ "S" , "M", "L" ] }
Se zápornou pozicí indexu, pokud zadáte více prvků v $each pole, poslední přidaný prvek je na zadané pozici od konce.