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í supdate()
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.