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

3 Möglichkeiten zum Entfernen eines Werts aus einem Array in MongoDB

MongoDB bietet einige Operatoren, mit denen Sie Werte aus Arrays entfernen können.

Dazu gehören:

  • $pull
  • $pullAll
  • $pop

Der $pull Betreiber

Der $pull -Operator entfernt aus einem bestehenden Array alle Instanzen eines Werts oder von Werten, die einer angegebenen Bedingung entsprechen.

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

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

Wir können ein Element aus dem Array in Dokument 1 wie folgt entfernen:

db.products.update( 
  { _id: 1 }, 
  { $pull: { sizes: "XXL" } } 
)

Wenn wir jetzt die Sammlung überprüfen, können wir diesen XXL sehen wurde wie angegeben aus Dokument 1 entfernt:

db.products.find()

Ergebnis:

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

Der $pullAll Betreiber

Die $pullAll Operator entfernt alle Instanzen der angegebenen Werte aus dem Array.

Angenommen, wir haben eine Sammlung mit den folgenden Dokumenten:

{ "_id" : 1, "bar" : [ 1, 7, 2, 3, 8, 7, 1 ] }
{ "_id" : 2, "bar" : [ 0, 1, 8, 17, 18, 8 ] }
{ "_id" : 3, "bar" : [ 15, 11, 8, 0, 1, 3 ] }

Und wir wollen alle Werte von 7 entfernen aus dem Array in Dokument 1.

Wir können dies tun:

db.foo.update( 
  { _id: 1 }, 
  { $pullAll: { bar: [ 7 ] } } 
)

Dadurch werden beide Vorkommen von 7 aus dem Array in Dokument 1 entfernt.

Wir können dies überprüfen, indem wir die Sammlung überprüfen:

db.foo.find()

Ergebnis:

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

Wir können sehen, dass das Array in Dokument 1 alle seine 7 hatte Werte wie angegeben entfernt.

Während $pullAll ähnelt $pull , der Unterschied ist, dass $pullAll entfernt Elemente, die den aufgelisteten Werten entsprechen. Dies unterscheidet sich von $pull , wo Sie Werte entfernen, indem Sie eine Abfrage angeben.

Der $pop Betreiber

Der $pop Operator entfernt das erste oder letzte Element eines Arrays.

Geben Sie einen Wert von -1 an um das erste Element zu entfernen, und 1 um das letzte zu entfernen.

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

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

Der folgende Code entfernt das letzte Element aus dem Array in Dokument 1:

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

Wir können dies überprüfen, indem wir die Sammlung ü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" ] }