sql >> Database >  >> NoSQL >> MongoDB

Voeg een waarde in op een specifieke positie in een array in MongoDB

In MongoDB kunt u de $push . gebruiken operator om een ​​waarde aan een array toe te voegen.

Deze operator kan worden gebruikt met verschillende modificaties, waaronder de $position modificator. De $position modifier stelt u in staat om de positie binnen de array te specificeren waar u de nieuwe waarde wilt invoegen.

Waarde toevoegen aan het begin van de array

Stel dat we de volgende verzameling hebben:

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

En stel dat we een waarde willen toevoegen aan het begin van de array in document 3.

We kunnen dit:

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

Laten we nu de collectie nog eens bekijken:

db.products.find()

Resultaat:

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

Arrays zijn gebaseerd op nul, dus position: 0 voegt de waarde toe als het eerste element in de array.

Voeg een waarde toe aan het midden van de array

Stel dat we de waarde M . willen toevoegen naar document 2, en we willen dat het tussen S . gaat en L .

Hier is hoe we dat kunnen doen:

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

Laten we nu de collectie nog eens bekijken:

db.products.find()

Resultaat:

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

We gebruikten $position: 1 , want dat is de positie die we wilden M te gaan (d.w.z. de tweede positie).

Negatieve waarden

U kunt ook een negatieve waarde als positie opgeven. Wanneer u dit doet, wordt de waarde ingevoegd op de gespecificeerde negatieve positie, terugtellend vanaf het einde.

Stel dat we L . willen invoegen tussen M en XL in document 1.

Hier is hoe we dat zouden doen met een negatieve positie:

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

Controleer het resultaat:

db.products.find()

Resultaat:

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

Met een negatieve indexpositie, als u meerdere elementen opgeeft in de $each array, het laatst toegevoegde element bevindt zich vanaf het einde op de opgegeven positie.


  1. Zoeken naar de waarde van een veld in MongoDB zonder het expliciet een naam te geven

  2. How-to:Cloudera Search toevoegen aan uw cluster met Cloudera Manager

  3. Hoe u uw open source-databases kunt beveiligen met ClusterControl

  4. JavaScript NoSQL-injectiepreventie in MongoDB