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í supdate()
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
,$sort
a$slice
modifiká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.