sql >> Database >  >> NoSQL >> MongoDB

MongoDB $pop

In MongoDB kunt u de $pop . gebruiken operator om het eerste of laatste element uit een array te verwijderen.

Gebruik $pop in combinatie met een methode zoals update() om het opgegeven document met de wijziging bij te werken.

Gebruik -1 om het eerste element te verwijderen, en 1 om de laatste te verwijderen.

Voorbeeld

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

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

Verwijder het eerste element

We kunnen het eerste element van de array in document 1 als volgt verwijderen:

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

Uitgang:

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

Dat bericht vertelt ons dat één document overeenkomt en één (d.w.z. hetzelfde document) is gewijzigd.

Laten we de collectie nu eens bekijken:

db.products.find()

Resultaat:

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

We kunnen zien dat het eerste element van de array in document 1 is verwijderd.

Verwijder het laatste element

Laten we nu het laatste element uit de array in document 2 verwijderen:

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

Uitgang:

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

Laten we nu de collectie nog eens bekijken:

db.products.find()

Resultaat:

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

We kunnen zien dat het laatste element uit de array is verwijderd in document 2.

Alle documenten bijwerken

Hier is een voorbeeld dat de updateMany() . gebruikt methode om alle documenten bij te werken:

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

Uitgang:

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

En controleer de collectie opnieuw:

db.products.find()

Resultaat:

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

Als alternatief kunt u de update() . gebruiken methode om meerdere documenten bij te werken door multi: true op te geven .


  1. is er een manier om ObjectId automatisch te genereren wanneer een mangoestmodel nieuw is?

  2. Redis Out of Memory Exceptions, maar heb nog steeds voldoende geheugen

  3. Redis SYNC en EXEC

  4. Redis failover met StackExchange / Sentinel van C#