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

MongoDB $pullAll

In MongoDB können Sie den $pullAll verwenden -Operator, um alle Instanzen der angegebenen Werte aus einem vorhandenen Array zu entfernen.

Verwenden Sie $pullAll in Verbindung mit einer Methode wie update() , updateOne() , oder updateMany() um das/die angegebene(n) Dokument(e) mit der Änderung zu aktualisieren.

Beispiel

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 sagen wir, 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 ] } } 
)

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.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.

Mehrere Werte entfernen

Das Argument, das wir für $pullAll bereitgestellt haben ist ein Array, daher können wir mehrere Werte entfernen, indem wir sie durch ein Komma trennen.

Beispiel:

db.foo.update( 
  { _id: 2 }, 
  { $pullAll: { bar: [ 17, 18 ] } } 
)

Ausgabe:

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

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

db.foo.find()

Ergebnis:

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

Wir können sehen, dass die Werte 17 und 18 wurden aus dem Array in Dokument 2 entfernt.

Alle Dokumente aktualisieren

Sie können multi: true hinzufügen oder verwenden Sie updateMany() Methode, um alle Dokumente zu aktualisieren, die den Kriterien entsprechen.

Entfernen Sie dabei alle Auswahlkriterien aus dem ersten Abfragedokument (das angibt, welche(s) Dokument(e) aktualisiert werden sollen). Verwenden Sie mit anderen Worten ein leeres Dokument als erstes Argument für update() (oder updateMany() )-Methode.

Beispiel:

db.foo.update( 
  { }, 
  { $pullAll: { bar: [ 1, 8 ] } },
  { multi: true }
)

Ausgabe:

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

In diesem Fall können wir sehen, dass drei Dokumente übereinstimmten (weil es drei Dokumente in der Sammlung gibt) und alle drei geändert wurden (weil sie alle die angegebenen Werte enthielten).

Sehen wir uns die Sammlung noch einmal an:

db.foo.find()

Ergebnis:

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

Wir können sehen, dass alle Instanzen wie angegeben aktualisiert wurden.