sql >> Databasteknik >  >> NoSQL >> MongoDB

Infoga ett värde vid en specifik position i en array i MongoDB

I MongoDB kan du använda $push operator för att lägga till ett värde till en array.

Denna operator kan användas med olika modifierare, varav en är $position modifierare. $position modifierare låter dig ange positionen inom arrayen som du vill infoga det nya värdet.

Lägg till värde till början av arrayen

Anta att vi har följande samling:

{ "_id" :1, "prod" :"Bat", "sizes" :[ "S", "M", "XL" ] }{ "_id" :2, "prod" :"Hatt" , "sizes" :[ "S", "L", "XL" ] }{ "_id" :3, "prod" :"Cap", "sizes" :[ "M", "L" ] } 

Och anta att vi vill lägga till ett värde till början av arrayen i dokument 3.

Vi kan göra detta:

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

Låt oss nu kontrollera samlingen igen:

db.products.find() 

Resultat:

{ "_id" :1, "prod" :"Bat", "sizes" :[ "S", "M", "XL" ] }{ "_id" :2, "prod" :"Hatt" , "sizes" :[ "S", "L", "XL" ] }{ "_id" :3, "prod" :"Cap", "sizes" :[ "S", "M", "L" ] }

Matriser är nollbaserade, så position: 0 lägger till värdet som det första elementet i arrayen.

Lägg till ett värde i mitten av arrayen

Anta att vi vill lägga till värdet M till dokument 2, och vi vill att det ska gå mellan S och L .

Så här kan vi göra det:

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

Låt oss nu kontrollera samlingen igen:

db.products.find() 

Resultat:

{ "_id" :1, "prod" :"Bat", "sizes" :[ "S", "M", "XL" ] }{ "_id" :2, "prod" :"Hatt" , "sizes" :[ "S", "M", "L", "XL" ] }{ "_id" :3, "prod" :"Cap", "sizes" :[ "S", "M" , "L" ] }

Vi använde $position: 1 , eftersom det var den positionen vi ville ha M att gå (dvs. den andra positionen).

Negativa värden

Du kan också ange ett negativt värde som position. När du gör detta infogas värdet vid den angivna negativa positionen räknat tillbaka från slutet.

Anta att vi vill infoga L mellan M och XL i dokument 1.

Så här skulle vi gå tillväga med en negativ position:

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

Kontrollera resultatet:

db.products.find() 

Resultat:

{ "_id" :1, "prod" :"Bat", "sizes" :[ "S", "M", "L", "XL" ] }{ "_id" :2, "prod" :"Hatt", "sizes" :[ "S", "M", "L", "XL" ] }{ "_id" :3, "prod" :"Cap", "sizes" :[ "S" , "M", "L" ] }

Med en negativ indexposition, om du anger flera element i $each array, är det senast tillagda elementet i den angivna positionen från slutet.


  1. Ställa in cache_store i en initialiserare

  2. MongoDB fråga $in med regex array av element

  3. pymongo:MongoClient eller Connection

  4. Flera befolkningar - mongoosejs