sql >> Database teknologi >  >> NoSQL >> MongoDB

Indsæt en værdi på en bestemt position i et array i MongoDB

I MongoDB kan du bruge $push operator for at tilføje en værdi til en matrix.

Denne operator kan bruges med forskellige modifikatorer, hvoraf en er $position modifikator. $position modifikator giver dig mulighed for at angive den position i arrayet, hvor du vil indsætte den nye værdi.

Tilføj værdi til begyndelsen af ​​arrayet

Antag, at vi har følgende samling:

{ "_id" :1, "prod" :"Flagermus", "størrelser" :[ "S", "M", "XL" ] }{ "_id" :2, "prod" :"Hat" , "sizes" :[ "S", "L", "XL" ] }{ "_id" :3, "prod" :"Cap", "sizes" :[ "M", "L" ] } 

Og antag, at vi vil tilføje en værdi til starten af ​​arrayet i dokument 3.

Vi kan gøre dette:

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

Lad os nu tjekke samlingen igen:

db.products.find() 

Resultat:

{ "_id" :1, "prod" :"Flagermus", "størrelser" :[ "S", "M", "XL" ] }{ "_id" :2, "prod" :"Hat" , "sizes" :[ "S", "L", "XL" ] }{ "_id" :3, "prod" :"Cap", "sizes" :[ "S", "M", "L" ] }

Arrays er nul-baserede, så position: 0 tilføjer værdien som det første element i arrayet.

Tilføj en værdi til midten af ​​arrayet

Antag, at vi vil tilføje værdien M til dokument 2, og vi ønsker, at det skal gå mellem S og L .

Sådan kan vi gøre det:

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

Lad os nu tjekke samlingen igen:

db.products.find() 

Resultat:

{ "_id" :1, "prod" :"Flagermus", "størrelser" :[ "S", "M", "XL" ] }{ "_id" :2, "prod" :"Hat" , "sizes" :[ "S", "M", "L", "XL" ] }{ "_id" :3, "prod" :"Cap", "sizes" :[ "S", "M" , "L" ] }

Vi brugte $position: 1 , fordi det var den position, vi ønskede M at gå (dvs. den anden position).

Negative værdier

Du kan også angive en negativ værdi som position. Når du gør dette, indsættes værdien ved den angivne negative position, der tæller tilbage fra slutningen.

Antag, at vi vil indsætte L mellem M og XL i dokument 1.

Sådan gør vi det ved at bruge en negativ position:

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

Tjek resultatet:

db.products.find() 

Resultat:

{ "_id" :1, "prod" :"Flagermus", "størrelser" :[ "S", "M", "L", "XL" ] }{ "_id" :2, "prod" :"Hat", "størrelser" :[ "S", "M", "L", "XL" ] }{ "_id" :3, "prod" :"Kasket", "størrelser" :[ "S" , "M", "L" ] }

Med en negativ indeksposition, hvis du angiver flere elementer i $each array, er det sidst tilføjede element i den angivne position fra slutningen.


  1. Mongoose indeksering i produktionskode

  2. Mongoose String til ObjectID

  3. Forstå MongoDB Client Timeout-indstillinger

  4. Forbinder Hydra-CLI til en adgangskodebeskyttet redis-server?