V MongoDB můžete použít $push operátor k připojení hodnoty k poli.
K určení pozice hodnoty v poli, pořadí prvků v poli, připojení více hodnot atd. můžete použít různé modifikátory.
Příklad
Předpokládejme, že máme kolekci nazvanou products s následujícími dokumenty:
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" ] }
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" } }
)
Výstup:
WriteResult({ "nMatched" :1, "nUpserted" :0, "nModified" :1 })
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" ] } Vložte hodnotu na určitou pozici
Můžete použít $each a $position modifikátory k určení, kam má být hodnota vložena do pole.
Můžeme například použít hodnotu 0 vložíte jej na začátek pole.
Příklad:
db.products.update(
{ _id: 3 },
{
$push: {
sizes: {
$each: [ "S" ],
$position: 0
}
}
}
)
Výstup:
WriteResult({ "nMatched" :1, "nUpserted" :0, "nModified" :1 })
$each modifikátor připojí k poli pole více hodnot. V tomto případě jsme však do pole vložili pouze jednu hodnotu, abychom použili $position modifikátor, musí se objevit s $each modifikátor.
Podívejme se znovu na sbírku:
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" :[ "S", "M", "L" , "XL" ] } Přidat a seřadit
Předpokládejme, že máme sbírku s následujícími dokumenty:
db.players.find()
Výsledek:
{ "_id" :1, "skóre" :[ 1, 5, 3 ] }{ "_id" :2, "skóre" :[ 8, 17, 18 ] }{ "_id" :3, "skóre " :[ 15, 11, 8 ] }
A předpokládejme, že chceme připojit nějaké hodnoty k poli v dokumentu 3, ale také chceme pole seřadit vzestupně poté, co jsme přidali hodnotu.
Můžeme to udělat:
db.players.update(
{ _id: 3 },
{
$push: {
scores: {
$each: [ 5, 12 ],
$sort: 1
}
}
}
)
Výstup:
WriteResult({ "nMatched" :1, "nUpserted" :0, "nModified" :1 })
Nyní, když si prohlížíme kolekci, můžeme vidět, že třetí dokument byl odpovídajícím způsobem upraven.
db.players.find()
Výsledek:
{ "_id" :1, "skóre" :[ 1, 5, 3 ] }{ "_id" :2, "skóre" :[ 8, 17, 18 ] }{ "_id" :3, "skóre " :[ 5, 8, 11, 12, 15 ] }
Chcete-li jej seřadit v sestupném pořadí, použijte $sort: -1 .
Rozdělit pole
Můžete použít $slice modifikátor pro omezení počtu prvků v poli.
Například do pole přidáme další hodnotu, ale pak pole rozdělíme na určitý počet prvků.
db.players.update(
{ _id: 3 },
{
$push: {
scores: {
$each: [ 3 ],
$slice: 3
}
}
}
)
Výstup:
WriteResult({ "nMatched" :1, "nUpserted" :0, "nModified" :1 })
Nyní znovu zkontrolujeme sbírku:
db.players.find()
Výsledek:
{ "_id" :1, "skóre" :[ 1, 5, 3 ] }{ "_id" :2, "skóre" :[ 8, 17, 18 ] }{ "_id" :3, "skóre " :[ 5, 8, 11 ] }
V tomto případě bylo pole rozděleno na plátky, ale hodnota, kterou jsme přidali, neskončila ani ve finálním poli. Je to proto, že hodnota byla připojena k poli a my jsme nepoužili $sort operace, a tak hodnota zůstala na konci pole, než bylo pole rozděleno na první tři prvky.
Tady je to znovu, tentokrát s výjimkou $sort modifikátor.
db.players.update(
{ _id: 3 },
{
$push: {
scores: {
$each: [ 3 ],
$sort: 1,
$slice: 3
}
}
}
)
Výstup:
WriteResult({ "nMatched" :1, "nUpserted" :0, "nModified" :1 })
Zkontrolujte sbírku:
db.players.find()
Výsledek:
{ "_id" :1, "skóre" :[ 1, 5, 3 ] }{ "_id" :2, "skóre" :[ 8, 17, 18 ] }{ "_id" :3, "skóre " :[ 3, 5, 8 ] } Přidat hodnotu pouze v případě, že neexistuje
Pokud chcete, aby byla hodnota připojena pouze v případě, že v poli ještě neexistuje, zvažte použití $addToSet operátor.