sql >> Database >  >> NoSQL >> MongoDB

2 manieren om een ​​waarde toe te voegen aan een array in MongoDB

Als u een verzameling documenten in MongoDB hebt die arrays bevatten, kunt u indien nodig nieuwe waarden aan die arrays toevoegen.

Afhankelijk van uw specifieke vereisten, kunt u de $push . gebruiken operator of de $addToSet telefoniste.

De $push Operator

Stel dat we een verzameling hebben met de naam products met de volgende documenten:

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

En laten we zeggen dat we een waarde willen toevoegen aan de array in document 3.

We kunnen $push . gebruiken in combinatie met update() om de waarde toe te voegen:

db.products.update(
   { _id: 3 },
   { $push: { sizes: "XL" } }
)

Laten we de collectie nogmaals bekijken om de wijziging te verifiëren:

db.products.find()

Resultaat:

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

We kunnen zien dat de waarde XL is toegevoegd aan de array in document 3.

De $push operator kan ook worden gebruikt met verschillende modificaties, zoals $position , $sort , en $slice .

U kunt ook meerdere waarden aan de array toevoegen met behulp van de $each modificatie.

Zie MongoDB $push voor voorbeelden.

De $addToSet Operator

De $addToSet operator werkt op dezelfde manier als $push , op een paar dingen na:

  • Als de waarde die u probeert toe te voegen al in de array bestaat, wordt deze niet toegevoegd.
  • De $position , $sort , en $slice modifiers kunnen niet worden gebruikt met $addToSet .

Stel dat onze collectie er zo uitziet:

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

Laten we meerdere waarden invoegen in de array in document 2:

db.products.update(
   { _id: 2 },
   { 
     $addToSet: { 
        sizes: {
           $each: [ "XXL", "XXXL" ]
        }
      } 
    }
)

Laten we nu de collectie nog eens bekijken:

db.products.find()

Resultaat:

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

We kunnen zien dat de twee waarden zoals verwacht aan de array in document 2 zijn toegevoegd.

Dit voorbeeld gebruikt de $each modifier, die u ook kunt gebruiken met de $push telefoniste.

Ik heb alleen de $each . gebruikt modifier omdat ik meerdere waarden aan het toevoegen was. Als ik maar één waarde had gebruikt, had ik de $each . kunnen weglaten modifier, en de syntaxis zou meer lijken op de bovenstaande $push voorbeeld.

Zoals gezegd, als de waarde al bestaat, wordt deze niet toegevoegd. Als u met beide operators een array toevoegt, wordt de hele array toegevoegd als een afzonderlijke waarde binnen de bestaande array.

Zie MongoDB $addToSet voor meer voorbeelden.


  1. 3 manieren om de rij met de maximale waarde in SQL te selecteren

  2. Hoe de uitvoeringstijd van een Lua-script in Redis bepalen?

  3. Hoe gebruik je ongeordende bulk insertie met Mongoskin?

  4. mongodb-authenticatie met verbindingsreeks