sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB $push

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

Du kan använda olika modifierare för att ange värdets position i arrayen, ordningen på elementen i arrayen, lägga till flera värden, etc.

Exempel

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

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" ] } 

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" } }
) 

Utdata:

WriteResult({ "nMatched" :1, "nUpserted" :0, "nModified" :1 })

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" ] }

Infoga värdet på en viss position

Du kan använda $each och $position modifierare för att ange var värdet ska infogas i arrayen.

Till exempel kan vi använda värdet 0 för att infoga den i början av arrayen.

Exempel:

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

Utdata:

WriteResult({ "nMatched" :1, "nUpserted" :0, "nModified" :1 })

$each modifieraren lägger till flera värden till matrisfältet. I det här fallet infogade vi bara ett värde i arrayen, dock för att använda $position modifierare måste den visas med $each modifierare.

Låt oss kolla in samlingen igen:

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" :[ "S", "M", "L" , "XL" ] }

Lägg till och sortera

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

db.players.find() 

Resultat:

{ "_id" :1, "scores" :[ 1, 5, 3 ] }{ "_id" :2, "scores" :[ 8, 17, 18 ] }{ "_id" :3, "scores " :[ 15, 11, 8 ] }

Och anta att vi vill lägga till några värden till matrisen i dokument 3, men vi vill också sortera matrisen i stigande ordning efter att vi har lagt till värdet.

Vi kan göra detta:

db.players.update(
   { _id: 3 },
   { 
     $push: { 
        scores: {
           $each: [ 5, 12 ],
           $sort: 1
        }
      } 
    }
) 

Utdata:

WriteResult({ "nMatched" :1, "nUpserted" :0, "nModified" :1 })

När vi nu tittar på samlingen kan vi se att det tredje dokumentet har ändrats i enlighet med detta.

db.players.find() 

Resultat:

{ "_id" :1, "scores" :[ 1, 5, 3 ] }{ "_id" :2, "scores" :[ 8, 17, 18 ] }{ "_id" :3, "scores " :[ 5, 8, 11, 12, 15 ] }

För att sortera den i fallande ordning, använd $sort: -1 .

Skär upp Arrayen

Du kan använda $slice modifierare för att begränsa antalet element i arrayen.

Låt oss till exempel lägga till ett annat värde till arrayen, men sedan dela upp arrayen till ett visst antal element.

db.players.update(
   { _id: 3 },
   { 
     $push: { 
        scores: {
           $each: [ 3 ],
           $slice: 3
        }
      } 
    }
) 

Utdata:

WriteResult({ "nMatched" :1, "nUpserted" :0, "nModified" :1 })

Låt oss nu kontrollera samlingen igen:

db.players.find() 

Resultat:

{ "_id" :1, "scores" :[ 1, 5, 3 ] }{ "_id" :2, "scores" :[ 8, 17, 18 ] }{ "_id" :3, "scores " :[ 5, 8, 11 ] }

I det här fallet var arrayen skivad, men värdet som vi lade till hamnade inte ens i den slutliga arrayen. Detta beror på att värdet lades till i arrayen och vi använde inte en $sort operation, och så förblev värdet i slutet av arrayen innan arrayen delades till sina första tre element.

Här är den igen, förutom den här gången med $sort modifierare.

db.players.update(
   { _id: 3 },
   { 
     $push: { 
        scores: {
           $each: [ 3 ],
           $sort: 1,
           $slice: 3
        }
      } 
    }
) 

Utdata:

WriteResult({ "nMatched" :1, "nUpserted" :0, "nModified" :1 })

Kontrollera samlingen:

db.players.find() 

Resultat:

{ "_id" :1, "scores" :[ 1, 5, 3 ] }{ "_id" :2, "scores" :[ 8, 17, 18 ] }{ "_id" :3, "scores " :[ 3, 5, 8 ] }

Lägg till värde endast om det inte finns

Om du bara vill att värdet ska läggas till om det inte redan finns i arrayen, överväg att använda $addToSet operatör.


  1. Google Cloud Platform – Kan inte ansluta till mongodb

  2. Anslut till AWS ElastiCache med In-Transit Encryption

  3. Hur man lagrar en Complex Nested JSON i Redis med Python

  4. Mongoimport av JSON-fil