sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB $pop

I MongoDB kan du använda $pop operator för att ta bort det första eller sista elementet från en array.

Använd $pop i kombination med en metod som update() för att uppdatera det angivna dokumentet med ändringen.

Använd -1 för att ta bort det första elementet och 1 för att ta bort den sista.

Exempel

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

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

Ta bort det första elementet

Vi kan ta bort det första elementet i arrayen i dokument 1 så här:

db.products.update( 
  { _id: 1 }, 
  { $pop: { sizes: -1 } } 
)

Utdata:

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

Det meddelandet talar om för oss att ett dokument matchade och ett (dvs samma dokument) har ändrats.

Låt oss ta en titt på kollektionen nu:

db.products.find()

Resultat:

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

Vi kan se att det första elementet i arrayen i dokument 1 har tagits bort.

Ta bort det sista elementet

Låt oss nu ta bort det sista elementet från arrayen i dokument 2:

db.products.update( 
  { _id: 2 }, 
  { $pop: { sizes: 1 } } 
)

Utdata:

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

Låt oss nu kontrollera samlingen igen:

db.products.find()

Resultat:

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

Vi kan se att det sista elementet har tagits bort från arrayen i dokument 2.

Uppdatera alla dokument

Här är ett exempel som använder updateMany() metod för att uppdatera alla dokument:

db.products.updateMany( 
  { }, 
  { $pop: { sizes: 1 } } 
)

Utdata:

{ "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 3 }

Och kontrollera samlingen igen:

db.products.find()

Resultat:

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

Alternativt kan du använda update() metod för att uppdatera flera dokument genom att ange multi: true .


  1. redis:säkerhetskopiera dump.rdb

  2. Ansluter Heroku App till Atlas MongoDB molntjänst

  3. Embedded Redis för Spring Boot

  4. Vad är det korrekta sättet att indexera i MongoDB när stora kombinationer av fält finns