sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB $pop

I MongoDB kan du bruge $pop operator for at fjerne det første eller sidste element fra et array.

Brug $pop i forbindelse med en metode såsom update() for at opdatere det angivne dokument med ændringen.

Brug -1 for at fjerne det første element og 1 for at fjerne den sidste.

Eksempel

Antag, at vi har en samling kaldet products med følgende dokumenter:

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

Fjern det første element

Vi kan fjerne det første element i arrayet i dokument 1 på denne måde:

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

Output:

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

Den meddelelse fortæller os, at et dokument matchede, og et (dvs. det samme dokument) blev ændret.

Lad os tage et kig 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, at det første element i arrayet i dokument 1 er blevet fjernet.

Fjern det sidste element

Lad os nu fjerne det sidste element fra arrayet i dokument 2:

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

Output:

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

Lad os nu tjekke 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, at det sidste element er blevet fjernet fra arrayet i dokument 2.

Opdater alle dokumenter

Her er et eksempel, der bruger updateMany() metode til at opdatere alle dokumenter:

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

Output:

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

Og tjek 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 bruge update() metode til at opdatere flere dokumenter ved at angive multi: true .


  1. Ydeevnesammenligning af brug af Redis-hashes vs mange nøgler

  2. Redis Lua script, der implementerer CAS (check-and-set)?

  3. Fjern alle felter, der er nul

  4. Hvordan håndterer ConnectionMultiplexer afbrydelser?