Pokud máte kolekci dokumentů v MongoDB, která obsahuje pole, můžete do těchto polí v případě potřeby přidat nové hodnoty.
V závislosti na vašich konkrétních požadavcích můžete použít $push nebo $addToSet operátor.
$push Operátor
Předpokládejme, že máme kolekci nazvanou products s následujícími dokumenty:
{ "_id" :1, "product" :"Bat", "sizes" :[ "S", "M", "L" ] }{ "_id" :2, "product" :"Klobouk" , "velikosti" :[ "S", "L", "XL" ] }{ "_id" :3, "produkt" :"Kšiltovka", "velikosti" :[ "M", "L" ] }
A řekněme, že chceme k poli v dokumentu 3 připojit hodnotu.
Můžeme použít $push ve spojení s update() pro připojení hodnoty:
db.products.update(
{ _id: 3 },
{ $push: { sizes: "XL" } }
)
Podívejme se znovu na sbírku, abychom ověřili změnu:
db.products.find()
Výsledek:
{ "_id" :1, "product" :"Bat", "sizes" :[ "S", "M", "L" ] }{ "_id" :2, "product" :"Klobouk" , "velikosti" :[ "S", "L", "XL" ] }{ "_id" :3, "produkt" :"Kšiltovka", "velikosti" :[ "M", "L", "XL" ] }
Vidíme, že hodnota XL byl přidán do pole v dokumentu 3.
$push Operátor lze také použít s různými modifikátory, jako je $position , $sort a $slice .
Do pole můžete také přidat více hodnot pomocí $each modifikátor.
Viz MongoDB $push pro příklady.
$addToSet Operátor
$addToSet Operátor funguje podobně jako $push , kromě několika věcí:
- Pokud hodnota, kterou se pokoušíte přidat, již v poli existuje, nebude přidána.
$position,$sorta$slicemodifikátory nelze použít s$addToSet.
Předpokládejme, že naše kolekce vypadá takto:
{ "_id" :1, "product" :"Bat", "sizes" :[ "S", "M", "L", "XL" ] }{ "_id" :2, "product" :"Klobouk", "velikosti" :[ "S", "L", "XL" ] }{ "_id" :3, "produkt" :"Kšiltovka", "velikosti" :[ "S", "M" , "L", "XL" ] } Vložme více hodnot do pole v dokumentu 2:
db.products.update(
{ _id: 2 },
{
$addToSet: {
sizes: {
$each: [ "XXL", "XXXL" ]
}
}
}
) Nyní znovu zkontrolujeme sbírku:
db.products.find() Výsledek:
{ "_id" :1, "product" :"Bat", "sizes" :[ "S", "M", "L", "XL" ] }{ "_id" :2, "product" :"Klobouk", "velikosti" :[ "S", "L", "XL", "XXL", "XXXL" ] }{ "_id" :3, "produkt" :"Kšiltovka", "velikosti" :[ "S", "M", "L", "XL" ] } Vidíme, že tyto dvě hodnoty byly připojeny k poli v dokumentu 2 podle očekávání.
Tento příklad používá $each modifikátor, který můžete také použít s $push operátor.
Použil jsem pouze $each modifikátor, protože jsem přidával více hodnot. Pokud bych používal pouze jednu hodnotu, mohl jsem vynechat $each modifikátor a syntaxe by vypadala spíše jako výše uvedený $push příklad.
Jak již bylo zmíněno, pokud hodnota již existuje, nebude přidána. Také u obou operátorů, pokud přidáte pole, bude celé pole přidáno jako samostatná hodnota v rámci existujícího pole.
Viz MongoDB $addToSet pro další příklady.