sql >> Databasteknik >  >> NoSQL >> MongoDB

2 sätt att lägga till ett värde till en array i MongoDB

Om du har en samling dokument i MongoDB som innehåller arrayer kan du lägga till nya värden till dessa arrayer om det behövs.

Beroende på dina specifika krav kan du använda $push operatorn eller $addToSet operatör.

$push Operatör

Anta att vi har en samling som heter products med följande dokument:

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

Och låt oss säga att vi vill lägga till ett värde till arrayen i dokument 3.

Vi kan använda $push i kombination med update() för att lägga till värdet:

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

Låt oss titta på samlingen igen för att verifiera ändringen:

db.products.find() 

Resultat:

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

Vi kan se att värdet XL har lagts till i arrayen i dokument 3.

$push operatorn kan också användas med olika modifierare, såsom $position , $sort och $slice .

Du kan också lägga till flera värden till arrayen genom att använda $each modifierare.

Se MongoDB $push för exempel.

$addToSet Operatör

$addToSet operatorn fungerar på liknande sätt som $push , förutom ett par saker:

  • Om värdet du försöker lägga till redan finns i arrayen kommer det inte att läggas till.
  • $position , $sort och $slice modifierare kan inte användas med $addToSet .

Anta att vår samling ser ut så här:

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

Låt oss infoga flera värden i arrayen i dokument 2:

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

Låt oss nu kontrollera samlingen igen:

db.products.find() 

Resultat:

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

Vi kan se att de två värdena lades till arrayen i dokument 2 som förväntat.

Det här exemplet använder $each modifierare, som du också kan använda med $push operatör.

Jag använde bara $each modifierare eftersom jag lade till flera värden. Om jag bara använde ett värde, kunde jag ha utelämnat $each modifierare, och syntaxen skulle ha sett mer ut som ovanstående $push exempel.

Som nämnts, om värdet redan finns, kommer det inte att läggas till. Om du lägger till en array med båda operatorerna kommer hela arrayen att läggas till som ett separat värde inom den befintliga arrayen.

Se MongoDB $addToSet för fler exempel.


  1. problem med att ansluta till redis att gå med med flera arbetarkues

  2. Node.js och Mongoose regex-fråga på flera fält

  3. Hur får man alla nycklar som matchar ett specifikt mönster från en hash i redis?

  4. Twisted:varför är det så att om du skickar en uppskjuten återuppringning till en uppskjuten tråd så blockeras tråden helt plötsligt?