MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB $pop

In MongoDB können Sie den $pop verwenden Operator zum Entfernen des ersten oder letzten Elements aus einem Array.

Verwenden Sie $pop in Verbindung mit einer Methode wie update() um das angegebene Dokument mit der Änderung zu aktualisieren.

Verwenden Sie -1 um das erste Element zu entfernen, und 1 um das letzte zu entfernen.

Beispiel

Angenommen, wir haben eine Sammlung namens products mit folgenden Dokumenten:

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

Entfernen Sie das erste Element

Wir können das erste Element des Arrays in Dokument 1 wie folgt entfernen:

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

Ausgabe:

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

Diese Nachricht teilt uns mit, dass ein Dokument übereinstimmte und eines (d. h. dasselbe Dokument) geändert wurde.

Werfen wir jetzt einen Blick auf die Sammlung:

db.products.find()

Ergebnis:

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

Wir können sehen, dass das erste Element des Arrays in Dokument 1 entfernt wurde.

Entferne das letzte Element

Entfernen wir nun das letzte Element aus dem Array in Dokument 2:

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

Ausgabe:

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

Lassen Sie uns nun die Sammlung erneut überprüfen:

db.products.find()

Ergebnis:

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

Wir können sehen, dass das letzte Element aus dem Array in Dokument 2 entfernt wurde.

Alle Dokumente aktualisieren

Hier ist ein Beispiel, das updateMany() verwendet Methode zum Aktualisieren aller Dokumente:

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

Ausgabe:

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

Und überprüfen Sie die Sammlung erneut:

db.products.find()

Ergebnis:

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

Alternativ können Sie das update() verwenden Methode zum Aktualisieren mehrerer Dokumente durch Angabe von multi: true .