sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB $push

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.


  1. Připojení aplikace Heroku ke cloudové službě Atlas MongoDB

  2. Jak nakonfigurovat webovou aplikaci spring boot s redis pomocí Dockeru

  3. Microsoft.Extensions.Caching.Redis vybrat jinou databázi než db0

  4. docker-compose:připojení mezi kontejnery bylo odmítnuto, ale služba je přístupná z hostitele