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

Vložte hodnotu na konkrétní pozici v poli v MongoDB

V MongoDB můžete použít $push operátor k připojení hodnoty k poli.

Tento operátor lze použít s různými modifikátory, jedním z nich je $position modifikátor. $position modifikátor umožňuje určit pozici v poli, do které chcete vložit novou hodnotu.

Přidat hodnotu na začátek pole

Předpokládejme, že máme následující kolekci:

{ "_id" :1, "prod" :"Bat", "sizes" :[ "S", "M", "XL" ] }{ "_id" :2, "prod" :"Klobouk" , "velikosti" :[ "S", "L", "XL" ] }{ "_id" :3, "prod" :"Kšiltovka", "velikosti" :[ "M", "L" ] } 

A předpokládejme, že chceme přidat hodnotu na začátek pole v dokumentu 3.

Můžeme to udělat:

db.products.update(
   { _id: 3 },
   { 
     $push: { 
        sizes: {
           $each: [ "S" ],
           $position: 0
        }
      } 
    }
) 

Nyní znovu zkontrolujeme sbírku:

db.products.find() 

Výsledek:

{ "_id" :1, "prod" :"Bat", "sizes" :[ "S", "M", "XL" ] }{ "_id" :2, "prod" :"Klobouk" , "velikosti" :[ "S", "L", "XL" ] }{ "_id" :3, "prod" :"Kšiltovka", "velikosti" :[ "S", "M", "L" ] }

Pole jsou založeny na nule, takže position: 0 přidá hodnotu jako první prvek v poli.

Přidat hodnotu do středu pole

Předpokládejme, že chceme přidat hodnotu M do dokumentu 2 a chceme, aby to bylo mezi S a L .

Zde je návod, jak to udělat:

db.products.update(
   { _id: 2 },
   { 
     $push: { 
        sizes: {
           $each: [ "M" ],
           $position: 1
        }
      } 
    }
) 

Nyní znovu zkontrolujeme sbírku:

db.products.find() 

Výsledek:

{ "_id" :1, "prod" :"Bat", "sizes" :[ "S", "M", "XL" ] }{ "_id" :2, "prod" :"Klobouk" , "velikosti" :[ "S", "M", "L", "XL" ] }{ "_id" :3, "prod" :"Kšiltovka", "velikosti" :[ "S", "M" , "L" ] }

Použili jsme $position: 1 , protože to je pozice, kterou jsme chtěli M jít (tj. druhá pozice).

Záporné hodnoty

Můžete také zadat zápornou hodnotu jako pozici. Když to uděláte, hodnota se vloží na zadanou zápornou pozici a počítá se zpět od konce.

Předpokládejme, že chceme vložit L mezi M a XL v dokumentu 1.

Zde je návod, jak na to použijeme zápornou pozici:

db.products.update(
   { _id: 1 },
   { 
     $push: { 
        sizes: {
           $each: [ "L" ],
           $position: -1
        }
      } 
    }
) 

Zkontrolujte výsledek:

db.products.find() 

Výsledek:

{ "_id" :1, "prod" :"Bat", "sizes" :[ "S", "M", "L", "XL" ] }{ "_id" :2, "prod" :"Klobouk", "velikosti" :[ "S", "M", "L", "XL" ] }{ "_id" :3, "prod" :"Čepice", "velikosti" :[ "S" , "M", "L" ] }

Se zápornou pozicí indexu, pokud zadáte více prvků v $each pole, poslední přidaný prvek je na zadané pozici od konce.


  1. Více instancí Redis

  2. Časová složitost zadd, když hodnota má skóre vyšší než nejvyšší skóre přítomné v cílové tříděné sadě

  3. redis + gevent - Špatný výkon - co dělám špatně?

  4. Jaký je rozdíl mezi id a _id v mongoose?