Umgang mit der erweiterten Datenverarbeitung mit dem Aggregation Framework von MongoDB

MongoDB hat einen langen Weg zurückgelegt. Obwohl es viele NoSQL-Datenbanken gibt, ist MongoDB die erste Datenbank, die in den Sinn kommt, wenn es um NoSQL-Datenbanken geht.

Obwohl es zwischen Leuten, die SQL mögen, und Leuten, die NoSQL bevorzugen, immer ein bisschen Hitze gegeben hat, lösen Datenbanken wie MongoDB in Wahrheit ein anderes Problem.

Und sie können sehr praktisch sein, wenn Sie unstrukturierte Daten übergeben, bei denen die schnelle und effiziente Bearbeitung der Datenform (und die Umwandlung in relevantes Wissen) hilfreicher ist als die solide Leistung, die SQL-Datenbanken der alten Schule bieten.

MongoDB verfügt über ein leistungsstarkes Framework, mit dem Sie Daten direkt auf dem Server bearbeiten können: das Aggregation Framework. Lassen Sie uns darauf eingehen und einige kurze Punkte darüber behandeln, was es ist und warum es wichtig ist.

Was ist das Aggregations-Framework?

Das Aggregationsframework ist nur eine Möglichkeit, Dokumente in einer Sammlung in MongoDB abzufragen. Dieses Framework existiert, weil Sie zu Beginn der Arbeit mit und der Bearbeitung von Daten häufig Sammlungen zusammenfassen, ändern, Felder ausreißen, Felder umbenennen, zusammenfassen, Dokumente nach Feldern gruppieren, Felder in verschiedenen Dokumenten auflösen usw. .

Dies kann nicht mit dem herkömmlichen Abfragesystem durchgeführt werden, mit dem MongoDB geliefert wird (dh der Such- oder Aktualisierungsabfrage oder einer anderen Abfrage, die Sie möglicherweise verwendet haben).

Mit der einfachen Abfrage in MongoDB können Sie nur vollständige oder Teile einzelner Dokumente abrufen. Sie ermöglichen es Ihnen nicht wirklich, die Dokumente auf dem Server zu bearbeiten und sie dann an Ihre Anwendung zurückzugeben.

Hier kommt das Aggregationsframework von MongoDB ins Spiel. Es ist nichts Externes, da die Aggregation in MongoDB eingebrannt wird. Mit dieser kostenlosen YouTube-Wiedergabeliste, die ich erstellt habe, können Sie lernen, mit dem MongoDB-Aggregationsframework zu arbeiten.

Pipeline

Das Aggregations-Framework basiert auf dem Pipeline-Konzept. Sehen wir uns ein Bild an, das es besser erklärt:

Wie Sie sehen, nehmen wir hier eine Sammlung auf und leiten sie durch eine Pipeline. Diese Pipeline besteht aus bestimmten Phasen, in denen bestimmte Bediener die Dokumente in der Sammlung mithilfe verschiedener Techniken ändern. Schließlich wird die Ausgabe an die Anwendung zurückgegeben, die die Abfrage aufruft.

Vergleichen Sie es mit einer einfachen Abfrage wie find. Sicher, es funktioniert auf die meisten Arten, aber es ist nicht wirklich nützlich, wenn Sie die Daten auch beim Abrufen ändern möchten.

Entweder müssen Sie die Dokumente abrufen und in der Anwendung auf dem Server entsprechend ändern, oder schlimmer noch, Sie senden sie an den Client und lassen sie vom Frontend-Code für Sie ändern.

In beiden Fällen verschwenden Sie Ressourcen und Bandbreite. Somit geht das Aggregationsframework dieses Problem genau an. Mal sehen, wie das mit den Operatoren geht.

Pipeline-Betreiber

In MongoDB ist die Pipeline ein Array, das aus verschiedenen Operatoren besteht, die eine Reihe von Dokumenten aufnehmen und geänderte Dokumente gemäß den vom Programmierer festgelegten Regeln ausspucken. Der nächste Operator nimmt die vom vorherigen Operator ausgespuckten Dokumente auf und wird daher als Pipeline bezeichnet.

Sie können viele Operatoren in einer Pipeline haben, und diese Operatoren können im Gegensatz zu regulären MongoDB-Abfragen auch wiederholt werden.

Werfen wir einen Blick auf einige gängige Pipeline-Betreiber in MongoDB.

$ group

Mit diesem Operator können Sie eine Reihe von Dokumenten anhand eines bestimmten Felds in Dokumenten gruppieren. Es kann auch verwendet werden, um die verschiedenen Felder in den Dokumenten zu gruppieren.

Ich glaube fest an das Sprichwort, dass ein Bild mehr sagt als 1000 Worte. Ein Video ist 1000 Bilder wert (technisch gesehen viel mehr Bilder, aber okay). Schauen wir uns also ein kurzes Video dazu an:

$ match

Der Match-Pipeline-Operator funktioniert sehr ähnlich wie der reguläre Find-Operator. Das Gute daran ist jedoch, dass es mehrfach verwendet werden kann, da Sie sich in einer Pipeline-Umgebung befinden! Das macht es mächtig.

Mal sehen, wie es in einer Sammlung verwendet wird:

$ limit

Der Pipeline-Operator $ skip überspringt die ersten N Dokumente und übergibt den Rest der Dokumente an den nächsten Operator. Sehen wir uns ein kurzes Beispiel an:

$ überspringen

Der Pipeline-Operator $ skip überspringt die ersten N Dokumente und übergibt den Rest der Dokumente an den nächsten Operator. Sehen wir uns ein kurzes Beispiel an:

$ entspannen

Dieser Operator ist persönlich mein Favorit. $ unwind nimmt ein Array-Feld auf und zerlegt es in mehrere N Unterdokumente, wobei das i-te Dokument den i-ten bestimmten Wert des Arrays als Wert des Feldnamens enthält.

In Kombination mit anderen Operatoren wie $ group und $ match wird dies für die Datenverarbeitung sehr leistungsfähig. Klingt verwirrend? Schauen wir uns ein einfaches Beispiel an:

$ project

Mit dem Projektoperator können Sie eine Reihe von Feldern aus jedem Dokument herausreißen und den Rest verwerfen. Darüber hinaus können Sie die gezupften Felder, Concat-Strings, Teilzeichenfolgen und vieles mehr umbenennen!

Mal sehen, wie das auf den Punkt gebracht wird:

Best Practices für die Verwendung des Aggregation Framework

Mit großer Macht kommt große Verantwortung. Sie können das Aggregationsframework auch problemlos für einfache Abfragen nutzen. Stellen Sie daher sicher, dass Sie keine schlechten Datenbankabfragen schreiben.

Beachten Sie zunächst folgende Punkte:

  1. MongoDB lehnt jeden Operator ab, der mehr als 100 MB RAM benötigt, und gibt einen Fehler aus. Stellen Sie daher sicher, dass Sie Ihre Daten so schnell wie möglich reduzieren, da ein einzelner Bediener nicht mehr als 100 MB Speicher belegen sollte.
  2. Ordnung ist wichtig! Wenn Sie $ match an die erste Stelle setzen, wird die Anzahl der Dokumente reduziert, die an den Rest der Pipeline übergeben werden. Wenn Sie $ project als nächstes setzen, wird die Größe eines einzelnen Dokuments weiter reduziert, indem Felder entfernt werden.
  3. Stellen Sie schließlich sicher, dass Sie alle Arbeiten ausführen, für die indizierte Felder (Sortieren, Abgleichen usw.) erforderlich sind, bevor Sie Operatoren wie $ project oder $ unwind verwenden. Dies liegt daran, dass diese Operatoren neue Dokumente erstellen, die nicht über die Indizes des Originaldokuments verfügen.

Fazit

MongoDB ist ein großartiges Datenbank-Tool und kann für kleine Startups und Unternehmen, die schnell iterieren möchten, sehr hilfreich sein. Dies ist teilweise auf seine losen Beschränkungen und die Vergebung zurückzuführen.

Ich benutze MongoDB selbst bei codedamn - eine Plattform für Entwickler wie Sie, auf der jeder lernt und sich verbindet!

Frieden!