Verwendung von Push-and-Pull-Operatoren in MongoDB

Verwendung von Push-and-Pull-Operatoren in MongoDB

  • Orchestrierung
6 Minuten Lesezeit Aktualisiert Dec 3, 2020

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:

  1. Aktualisieren Sie das Array, um Elemente an den angegebenen Positionen hinzuzufügen.
  2. Sortiere das Array, wenn $sort Modifikator angegeben ist.
  3. Slice das Array, wenn $slice Modifikator angegeben ist.
  4. 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ü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:

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

Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.

Mehr aus Orchestrierung

Abonnieren Sie The Brief

Mit der Registrierung für dieses Angebot bestätigen Sie, dass Sie die Datenschutzrichtlinie von BMC gelesen und zugestimmt haben.

Danke

Sie haben The Brief abonniert
Das Briefing umfasst die Mainframe- und Enterprise-Orchestrierung – BMC AMI und Control-M – sowie die Analystenforschung, Kundeneinsätze und Events in beiden Bereichen.