Auf einen Blick: Push- und Pull-Operatoren in MongoDB werden verwendet, um Arrays innerhalb von Dokumenten durch Hinzufügen oder Entfernen von Elementen zu verändern. Der $push-Operator fügt Werte hinzu, während der $pull-Operator Elemente basierend auf bestimmten Bedingungen entfernt. Dieser Leitfaden erklärt deren Syntax, Verwendung und Modifikatoren wie $each, $sort und $position und bietet praktische Beispiele für Nutzer.
- $push fügt Arrays Werte hinzu und kann neue Arrays erstellen, wenn sie fehlen.
- $pull entfernt bestimmte Werte aus Arrays basierend auf den Bedingungen.
Die $push- und $pull-Operatoren sind Teil von Array-Operatoren, die Arrays in MongoDB-Dokumenten modifizieren sollen. In diesem Tutorial zeige ich Ihnen, wie die Push- und Pull-Operatoren funktionieren und wie Sie sie mit zusätzlichen Modifikatoren und Bedingungen verwenden können.
Was sind Push-and-Pull-Operatoren?
Push und Pull sind die beiden Operationen, die verwendet werden, um Elemente aus Arrays in MongoDB-Dokumenten hinzuzufügen und zu entfernen. Das Pushen und Pullen von Elementen erfolgt mit den MongoDB-$push- bzw. $pull-Operatoren:
- Der $push-Operator fügt einem Array einen bestimmten Wert hinzu.
- Der $pull-Operator entfernt Werte aus einem Array, das einer bestimmten Bedingung entspricht.
Grundlegende Syntax $push Operators
{ $push: { : , ... } }
Grundlegende Syntax $pull Operators
{ $pull: { : , ... } }
Schauen wir uns jeden einzelnen genauer an, einschließlich ihrer Funktionsweise und wie Sie sie nutzen können.
Wie der MongoDB-$push-Operator funktioniert
Man sieht, dass der $push-Operator zwei Argumente annimmt:
- Das Arrayfeld
- Der Wert, der dem angegebenen Array-Feld hinzugefügt werden soll
Wenn das Array-Feld im Dokument nicht vorhanden ist, erzeugt der $push-Operator ein neues Array-Feld. Ist das angegebene Feld jedoch kein Array, gibt MongoDB einen Fehler zurück.
$push Operator-Modifikatoren
Die Funktionalität des $push-Operators kann mit den folgenden Modifikatoren weiter erweitert werden.
- $each. Der $each-Modifikator wird verwendet, um mehrere Werte an ein Array anzuhängen. Wenn der $each-Operator nicht angegeben ist, werden alle Werte im $push-Operator als ein einzelnes Element an das Array-Feld im Dokument angehängt.
- $slice. Dies begrenzt die Anzahl der Elemente im Array. Dies muss jedoch zusammen mit dem $each-Modifikator verwendet werden.
- $sort. Die $sort Modifikatoren ordnen die Gegenstände im Array. Dieser Modifikator erfordert außerdem $each Modifikator.
- $position. Der $push-Operator fügt standardmäßig ein neues Element am Ende eines Arrays hinzu. Verwenden Sie den $position-Modifikator, wenn Sie explizit angeben möchten, wo das Element angehängt werden soll.
Die $push-Operation wird in folgender Reihenfolge durchgeführt, unabhängig davon, in welcher Reihenfolge die Modifikatoren definiert sind:
- Aktualisieren Sie das Array, um Elemente an den angegebenen Positionen hinzuzufügen.
- Sortiere das Array, wenn $sort Modifikator angegeben ist.
- Slice das Array, wenn $slice Modifikator angegeben ist.
- Lagern Sie das Array.
Als Nächstes schauen wir uns an, wie wir MongoDB $push Operationen zur Bearbeitung von Dokumenten nutzen können. Ich zeige ein paar Beispiele, also springe zu dem, das du brauchst:
- Fügen Sie einem Array einen einzelnen Wert hinzu
- Fügen Sie mehrere Werte einem Array hinzu
- Verwende die $sort- und $slice-Modifikatoren
- Verwenden Sie den $position-Modifikator
Für den Basisdatensatz für diese Beispiele werde ich die Sammlung "vehicledetails" verwenden.
db.vehicledetails.find().pretty()
Ergebnis:
Fügen Sie einem Array einen einzelnen Wert hinzu
Schauen wir uns an, wie wir einen einzelnen Wert an ein Array anhängen können, wenn ein Arrayfeld vorhanden ist und es nicht vorhanden ist. In allen Beispielen wird das Feld "_id" verwendet, um anzuzeigen, welches Dokument das Array hinzugefügt werden soll. Beispiel: Kein Arrayfeld Ein neues Arrayfeld wird mit dem im $push-Operator angegebenen Feldnamen erstellt.
db.vehicledetails.update({"_id": ObjectId("5fbc52f05f9a62418038240d")}, {$push: {"vehicle_colours": "red"}})
Ergebnis:
Beispiel: Wenn das Array-Feld vorhanden ist Das neue Element wird am Ende des Arrays angehängt.
db.vehicledetails.update({"_id": ObjectId("5fbc52f05f9a62418038240d")}, {$push: {"vehicle_colours": "green"}})
Ergebnis:
Wenn wir versuchen, den $push-Operator für ein Nicht-Array-Feld zu verwenden, führt das zu einem Fehler. Der folgende Code gibt einen Fehler zurück, da wir versuchen, einen Wert an das Nicht-Array-Feld "make" anzuhängen.
db.vehicledetails.update({"_id": ObjectId("5fbc52f05f9a62418038240d")}, {$push: {"make": "green"}})
Ergebnis:
Mehrere Werte an ein Array anfügen
Sie können mehrere Werte an ein Array anhängen, mit oder ohne $each Modifikator. Beispiel: Mehrere Werte ohne $each Modifikator Wenn der $each-Modifikator nicht vorhanden ist, fügt MongoDB alle Werte als einen einzigen Wert an das angegebene Array-Feld an.
db.vehicledetails.update({"_id": ObjectId("5fbc52f55f9a62418038240e")}, {$push: {"vehicle_colours": ["blue", "red", "yellow"]}})
Ergebnis:
Hier sehen Sie, dass "blau", "rot" und "gelb" Elemente eines neu erstellten Arrays sind. Aber dieses Array ist nur ein Element des "vehical_colours"-Arrays. Beispiel: Mehrere Werte mit $each Modifikator Wenn eine $push-Operation mit dem $each-Modifikator definiert wird, wird jedes Element der $push Operation als einzelne Elemente zum Array hinzugefügt.
db.vehicledetails.update({"_id": ObjectId("5fbc52f55f9a62418038240e")}, {$push: {"vehicle_colours": { $each :["blue", "red", "yellow"]}}})
Ergebnis:
Hier hat "vehicle_colours" nach $push Operation drei Elemente.
Verwendung der $sort- und $slice-Modifikatoren
In diesem Abschnitt zeigen wir, wie man die $sort- und $slice-Modifikatoren anhand des folgenden Dokuments in der Sammlung "vehicledetails" verwendet.
Fügen wir die Farbe "Silber" dem Feld "vehicle_colours" hinzu und sortieren den Inhalt alphabetisch (aufsteigende Reihenfolge).
db.vehicledetails.update({"_id": ObjectId("5fbc52fb5f9a62418038240f")}, {$push: {"vehicle_colours": { $each :["silver", "orange"], $sort: 1}}})
Ergebnis:
Die obige Ausgabe zeigt uns, dass die neuen Farben hinzugefügt wurden und das Array alphabetisch sortiert wurde. Im folgenden Beispiel fügen wir die Farbe "dunkelblau" dem Array-Feld hinzu, sortieren alphabetisch und verwenden den $slice-Modifikator, um das Array auf 5 Elemente zu begrenzen.
db.vehicledetails.update({"_id": ObjectId("5fbc52fb5f9a62418038240f")}, {$push: {"vehicle_colours": { $each :["dark blue"], $sort: 1, $slice: 5}}})
Ergebnis:
Verwendung des $position-Modifikators
Der $position-Modifikator wird verwendet, um die Position im Array anzugeben, an der das neue Element hinzugefügt werden soll. Dies überschreibt das Standardverhalten, die Elemente am Ende des Arrays anzuhängen. Im folgenden Beispiel fügen wir die Farbe "weiß" am Anfang des Array-Feldes "vehicle_colours" hinzu. Im "$position"-Modifikator wird Null (0) verwendet, um die erste Position (Index 0) des Arrays anzuzeigen.
db.vehicledetails.update({"_id": ObjectId("5fbc52fb5f9a62418038240f")}, {$push: {"vehicle_colours": { $each :["white"], $position: 0}}})
Ergebnis:
Wie funktioniert der MongoDB-$pull-Operator
Der $pull-Operator wird verwendet, um alle Instanzen eines Wertes oder mehrerer Werte aus einem MongoDB-Dokument, die einer bestimmten Bedingung entsprechen, zu entfernen. Wenn ein Array eingebettete oder verschachtelte Dokumente enthält, wird die angegebene $pull-Operator-Bedingung auf jedes Array-Element angewendet, als wäre jedes Array-Element ein Dokument in einer Sammlung. Wenn der zu entfernende Wert ein Array ist, entfernt der $pull-Operator nur die Elemente im Array, die dem exakt angegebenen Wert entsprechen, einschließlich der Reihenfolge, in der die Elemente definiert sind. Ist der zu entfernen angegebene Wert ein Dokument, entfernt der $pull-Operator Elemente, die den angegebenen Feldern und Werten entsprechen. In diesem Fall wird die Reihenfolge der Felder verworfen. Jetzt führe ich Sie durch einige Beispiele des $pull-Operators. Springen Sie zu denen, die Sie benötigen:
- Entferne ein einzelnes Element aus einem Array
- Entfernen Sie alle Elemente mit einem bestimmten Wert
- Entfernen Sie Gegenstände, die einer bestimmten $pull
- Entferne Elemente aus einer Reihe von Dokumenten
In diesen Beispielen verwenden wir folgenden Datensatz, um dies zu demonstrieren:
Entferne ein einzelnes Element aus einem Array
Hier entfernen wir den einzelnen Wert "2018" aus dem "model_year"-Array-Feld. Das Feld "_id" wird verwendet, um das Dokument anzuzeigen, auf dem die $pull-Operation ausgeführt werden soll.
db.vehicledetails.update({"_id": ObjectId("5fbc52fb5f9a62418038240f")}, {$pull: {"model_year": 2018}})
Ergebnis:
Entfernen Sie alle Elemente, die einem bestimmten Wert entsprechen
In diesem Beispiel verwenden wir die Sammlung "vehicledetails", um die Farben "blau" und "grün" aus dem "vehicle_colours"-Array-Feld zu entfernen und das Modelljahr 2020 aus dem "model_year"-Array-Feld zu entfernen.
db.vehicledetails.update({}, {$pull: {"vehicle_colours": { $in: ["blue", "green"]}, "model_year": 2020}},{multi: true})
Ergebnis:
Entfernen Sie Gegenstände, die einer bestimmten $pull Bedingung entsprechen
Verwenden wir die Sammlung "student_grades" und erstellen eine Bedingung, um alle Noten zu entfernen, die kleiner als oder gleich 50 sind, aus dem folgenden Dokument. Unverändertes Dokument:
Verändertes Dokument:
db.student_grades.update({"_id" : ObjectId("5fbed0faa94306028d2d7520")}, {$pull: {"grades": {$lte: 50}}})
Ergebnis:
Die angegebene Bedingung ({$lte: 50}) entfernte jedes Element, das im Feld "grades" im Array-Feld kleiner oder gleich 50 ist.
Entfernen Sie Elemente aus einer Vielzahl von Dokumenten
In diesem Beispiel verwenden wir die "student_grades"-Sammlung, um alle Werte zu entfernen, die im Feld "Grades" in allen Dokumenten der Sammlung kleiner oder gleich 50 sind. Unveränderte Sammlung:
Modifizierte Sammlung:
db.student_grades.update({}, {$pull: {"grades": {$lte: 50}}},{multi: true})
Ergebnis:
Die obige Ausgabe zeigt uns, dass jeder Wert, der kleiner als oder gleich 50 ist, aus dem "grades"-Array-Feld in allen Dokumenten der "student_grades"-Sammlung entfernt wurde. Damit ist dieses Tutorial abgeschlossen.
Verwandte Literatur
- BMC Machine Learning & Big Data Blog
- MongoDB Guide, eine Reihe von Artikeln und Tutorials
- MongoDB: Die Mongo-Shell & Grundbefehle
- Datenspeicher erklärt: Data Lake vs. Warehouse vs. Datenbank
MongoDB-Leitfaden
- MongoDB-Überblick: Einstieg mit MongoDB
- Wie man MongoDB auf Ubuntu und Mac installiert
- Erstellung einer Datenbank in MongoDB
- MongoDB Shell Grundbefehle
- MongoDB Compass: Nutzung der Mongo GUI
- MongoDB rollenbasierte Zugriffskontrolle (RBAC) erklärt
- MongoDB-Projektion und Projektionsoperatoren erklärt
- MongoDB-Aggregatfunktionen erklärt
- MongoDB-Sortierung: sort()-Methode & Beispiele
- Verwendung von Push-and-Pull-Operatoren in MongoDB
- Wie man MongoDB $unwind
- 23 Gängige MongoDB-Abfrageoperatoren und deren Verwendung
- MongoDB GeoLocation-Abfragebeispiele
- Einführung in MongoDB-Transaktionen
- MongoDB-Indizes: Top-Indextypen und deren Verwaltung
- Die wichtigsten MongoDB-Befehle, die du kennen solltest
- MongoDB-Replikation: Eine vollständige Einführung
- Wie man einen MongoDB-Cluster einrichtet
- MongoDB Sharding: Konzepte, Beispiele & Tutorials
- MongoDB Atlas: Einrichtung und Nutzung von verwaltetem MongoDB
- Wie man MongoDB als Docker-Container ausführt
- MongoDB-Speichernutzung, Verwaltung und Anforderungen
- Wie man Mongodump für MongoDB-Backups verwendet
- Mongorestore-Beispiele zur Wiederherstellung von MongoDB-Backups
- Wie man PyMongo benutzt
- Wie man Mongoose für MongoDB und NodeJS verwendet
- MongoDB Spickzettel
- MongoDB vs Cassandra: NoSQL-Datenbanken im Vergleich
- PostgreSQL vs MongoDB: Vergleich von Datenbanken
- MySQL vs. MongoDB: Vergleich von Datenbanken
- MongoDB-Zertifizierungen: Eine Einführung
Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.