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.