MongoDB Aggregation: Datenbank analysieren und filtern

MongoDB Aggregation ist ein wertvolles Tool, wenn Sie Ihre Datenbanken analysieren oder filtern möchten. Durch das Pipeline-System ist es möglich, Anfragen und damit auch Ausgaben sehr individuell zu spezifizieren.

Was ist Aggregation in MongoDB?

MongoDB ist eine nichtrelationale und dokumentenorientierte Datenbank, die für den Einsatz mit großen und vielfältigen Datenmengen ausgelegt ist. Durch den Verzicht auf starre Tabellen und Techniken wie das Sharding, bei dem die Daten auf verschiedenen Knotenpunkten gespeichert werden, kann die NoSQL-Lösung horizontal skaliert werden und bleibt dabei sehr flexibel und vor Ausfällen geschützt. Die Dokumente im binären JSON-Format BSON werden in sogenannten Sammlungen (Collections) gebündelt und lassen sich mit der MongoDB Query Language abfragen und bearbeiten. Auch wenn diese Sprache sehr viele Optionen bietet, eignet sie sich nicht bzw. nur unzureichend für die Datenanalyse. Für diesen Vorgang bietet MongoDB Aggregation.

Unter diesem Begriff versteht man in der Informatik verschiedene Vorgänge. In Bezug auf MongoDB meint Aggregation die Ermittlung zusammengefasster Informationen. Dafür werden Daten aus einem oder verschiedenen Dokumenten auf bestimmte definierte Faktoren hin analysiert und gefiltert. Am Ende dieses Vorgangs steht ein einzelnes und klares Ergebnis. Im Folgenden erklären wir Ihnen nicht nur, welche Möglichkeiten zur umfangreichen Datenanalyse Ihnen MongoDB Aggregation bietet, sondern zeigen auch, wie Sie die aggregate ( )-Methode für das Datenbankmanagementsystem beispielhaft einsetzen können.

MongoDB Aggregation: Vorbereitungen und Voraussetzungen

Wenn Sie MongoDB Aggregation nutzen möchten, müssen nur wenige Voraussetzungen erfüllt sein. Die Methode wird in der Shell ausgeführt und funktioniert nach logischen Regeln, die Sie für Ihre individuellen Anforderungen anwenden können. Dafür muss MongoDB bereits auf Ihrem Rechner installiert sein. Wie Sie die Datenbank downloaden, installieren und erstmals ausführen, erfahren Sie in unserem umfangreichen MongoDB-Tutorial. Sie sollten außerdem eine leistungsstarke Firewall nutzen und Ihre Datenbank bereits nach allen gängigen Sicherheitsstandards eingerichtet haben. Um MongoDB Aggregation durchzuführen, benötigen Sie Administrationsrechte. Die Datenbank arbeitet plattformübergreifend, die im weiteren Verlauf beschriebenen Schritte gelten somit für alle Betriebssysteme gleichermaßen.

Managed Database von IONOS

Datenbank-Services ohne Aufwand. Maßgeschneidert auf Ihre Bedürfnisse und individuell anpassbar!

Hochverfügbar
Sicher
Individuell

Die Rolle der Pipeline für die MongoDB Aggregation

Sie haben auch in MongoDB die Möglichkeit, einfache Suchen oder Anfragen durchzuführen. Die Datenbank wird Ihnen dann umgehend die gewünschten Ergebnisse ausspielen. Diese Methode ist allerdings stark limitiert, da sie lediglich Ergebnisse anzeigen kann, die bereits innerhalb der hinterlegten Dokumente existieren. Für eine tiefergehende Analyse, wiederkehrende Muster oder weiterführende Informationen ist diese Art der Abfrage nicht vorgesehen. Manchmal jedoch müssen unterschiedliche Quellen innerhalb einer Datenbank berücksichtigt werden, um sinnvolle Rückschlüsse ziehen zu können. Für solche Anforderungen kommt MongoDB Aggregation zum Einsatz. Um ein Ergebnis zu erzielen, bedient sich die Methode sogenannter Pipelines.

Welche Funktion hat die Pipeline?

Aggregation Pipelines in MongoDB sind Verfahren, bei denen die vorhandenen Daten mit Hilfe unterschiedlicher Zwischenschritte analysiert und gefiltert werden, um Nutzerinnen und Nutzern das gesuchte Ergebnis anzeigen zu können. Diese Zwischenschritte bezeichnet man als Stages. Je nach Anforderung können eine Stage oder mehrere Stages initiiert werden. Diese werden dann hintereinander ausgeführt und verändern Ihren ursprünglichen Input so, dass am Ende der gesuchte Output angezeigt werden kann. Während sich der Input dabei aus zahlreichen Daten zusammensetzt, ist der Output – also das Endergebnis – singulär. Welche unterschiedlichen Stages Ihnen MongoDB Aggregation bietet, erläutern wir Ihnen gleich.

Welche Syntax hat die Pipeline der MongoDB Aggregation?

Zunächst lohnt sich ein kurzer Blick auf die grundsätzliche Syntax von MongoDB Aggregation. Die Methode ist immer nach demselben Schema aufgebaut und kann dann für Ihre spezifischen Anforderungen angepasst werden. Der grundsätzliche Aufbau sieht so aus:

db.collection_name.aggregate ( pipeline, options )
shell

Dabei ist collection_name der Name der berücksichtigten Sammlung. Unter pipeline werden die benötigten oder gewünschten Stages von MongoDB Aggregation aufgeführt und options kann für weitere optionale Parameter genutzt werden, die die benötigte Ausgabe spezifizieren.

Welche Stages gibt es?

Es gibt zahlreiche Stages für die Pipeline in MongoDB Aggregation. Die meisten können auch mehrfach innerhalb einer Pipeline verwendet werden. Es würde den Rahmen sprengen, alle Optionen hier aufzulisten, zumal einige nur für sehr spezifische Operationen benötigt werden. Um Ihnen allerdings einen Eindruck zu vermitteln, listen wir hier ein paar der meistgenutzten Stages auf:

  • $count: Mit dieser Stage erhalten Sie eine Angabe, wie viele BSON-Dokumente für die Stage oder Stages in dieser Pipeline berücksichtigt wurden.
  • $group: Diese Stage sortiert und bündelt die Dokumente nach bestimmten Parametern.
  • $limit: Mit dieser Stage reduzieren Sie die angezeigten Dokumente.
  • $match: Mit der Stage $match limitieren Sie die Dokumente, die für die folgende Stage herangezogen werden.
  • $out: Mit dieser Stage werden die Ergebnisse der MongoDB Aggregation in die Collection aufgenommen. Dieser Schritt kann nur als Abschluss einer Pipeline verwendet werden.
  • $project: Mit $project wählen Sie spezielle Felder aus einer Sammlung aus.
  • $skip: Diese Stage ignoriert eine bestimmte Anzahl an Dokumenten. Diese legen Sie mit einer Option fest.
  • $sort: Auf diese Weise sortieren Sie Dokumente nach einer Methode Ihrer Wahl. Die Dokumente werden darüber hinaus allerdings nicht verändert.
  • $unset: $unset schließt bestimmte Felder aus und funktioniert somit als Gegensatz zu $project.

MongoDB Aggregation: Einige praktische Beispiele

Damit Sie besser verstehen, wie MongoDB Aggregation in der Praxis funktioniert, zeigen wir Ihnen nun ein paar Beispiele für unterschiedliche Stages und wie Sie diese verwenden. Wenn Sie MongoDB Aggregation nutzen möchten, öffnen Sie die Shell als Administrator bzw. Administratorin. Im Normalfall wird zunächst eine Test-Datenbank angezeigt. Möchten Sie eine andere Datenbank verwenden, ist der use-Befehl die richtige Wahl.

Für unser Beispiel stellen wir uns eine Datenbank vor, die die Daten von Kunden und Kundinnen enthält, die ein bestimmtes Produkt gekauft haben. Diese Datenbank enthält der Übersicht halber nur zehn Dokumente, die alle nach demselben Schema aufgebaut sind. Dieses sieht beispielhaft so aus:

{
	"name" : "Schmidt",
	"city" : "Berlin",
	"country" : "Germany",
	"quantity" : 14
}
shell

Die Informationen, die für alle Käuferinnen und Käufer bekannt sind, sind also der Name, ihr Wohnort, ihr Land und die Anzahl der gekauften Produkte.

Wenn Sie nun MongoDB Aggregation ausprobieren möchten, verwenden Sie die Methode insertMany ( ), um sämtliche Dokumente mit Kundendaten zu der Collection „kunden“ hinzuzufügen:

db.kunden.insertMany ( [
	{ "name" : "Schmidt", "city" : "Berlin", "country" : "Germany", "quantity" : 14 },
	{ "name" : "Meyer", "city" : "Hamburg", "country" : "Germany", "quantity" : 26 },
	{ "name" : "Lee", "city" : "Birmingham", "country" : "England", "quantity" : 5 },
	{ "name" : "Rodriguez", "city" : "Madrid", "country" : "Spain", "quantity" : 19 },
	{ "name" : "Nowak", "city" : "Krakow", "country" : "Poland", "quantity" : 13 },
{ "name" : "Rossi", "city" : "Milano", "country" : "Italy", "quantity" : 10 },
{ "name" : "Arslan", "city" : "Ankara", "country" : "Turkey", "quantity" : 18 },
{ "name" : "Martin", "city" : "Lyon", "country" : "France", "quantity" : 9 },
{ "name" : "Mancini", "city" : "Rome", "country" : "Italy", "quantity" : 21 },
{ "name" : "Schulz", "city" : "Munich", "country" : "Germany", "quantity" : 2 }
] )
shell

Wenn Sie diese Eingabe so ausführen, wird Ihnen eine Liste mit Objekt-IDs für jedes einzelne Dokument ausgegeben.

So nutzen Sie $match

Um die Möglichkeiten der MongoDB Aggregation zu veranschaulichen, wenden wir auf unsere Sammlung „kunden“ zuerst die Stage $match an. Ohne weitere Parameter würde diese uns einfach die komplette Liste der oben aufgeführten Kundendaten ausgeben. Im folgenden Beispiel weisen wir die Methode allerdings an, uns lediglich Kunden und Kundinnen aus Italien anzuzeigen. Der passende Befehl sieht folgendermaßen aus:

db.kunden.aggregate ( [
	{ $match : { "country" : "Italy" } }
] )
shell

Die Ausgabe wird Ihnen nun lediglich die Objekt-IDs und Daten der beiden italienischen Kunden oder Kundinnen anzeigen.

$sort für einen besseren Überblick

Möchten Sie Ihre Kundendatenbank sortieren, können Sie MongoDB Aggregation mit der Stage $sort verwenden. Im folgenden Beispiel weisen wir das System an, alle Kundendaten nach Anzahl der gekauften Einheiten zu ordnen und beginnen dabei mit der höchsten Zahl. Die passende Eingabe sieht für unser Beispiel so aus:

db.kunden.aggregate ( [
	{ $sort : { "quantity" : -1 } }
] )
shell

Begrenzen Sie den Output mit $project

Bei den bisher angewendeten Stages werden Sie sehen, dass der Output vergleichsweise umfangreich ist. Neben den eigentlichen Informationen innerhalb der Dokumente wird so zum Beispiel auch immer die Objekt-ID mitausgegeben. Mithilfe von $project können Sie in der MongoDB Aggregation Pipeline selbst bestimmen, welche Informationen ausgegeben werden sollen. Hierfür legen wir für benötigte Felder den Wert 1 und für überflüssige Felder den Wert 0 fest. In unserem Beispiel möchten wir lediglich den Kundennamen und die Anzahl der gekauften Produkte sehen. Dafür geben wir dies ein:

db.kunden.aggregate ( [
	{ $project : { _id : 0, name : 1, city : 0, country : 0, quantity : 1 } }
] )
shell

Mehrere Stages für MongoDB Aggregation kombinieren

MongoDB Aggregation gibt Ihnen auch immer die Möglichkeit, mehrere Stages hintereinander anzuwenden. Diese werden dann nacheinander durchlaufen, und am Ende steht eine Ausgabe, die alle gewünschten Parameter berücksichtigt. Wenn Sie zum Beispiel lediglich die Namen und Käufe der deutschen Kundinnen und Kunden in absteigender Reihenfolge anzeigen lassen möchten, nutzen Sie die oben beschriebenen Stages wie folgt:

db.kunden.aggregate ( [
	{ $match : { "country" : "Germany" } }
	{ $project : { _id : 0, name : 1, city : 0, country : 0, quantity : 1 } }
	{ $sort : { "quantity" : -1 } }
] )
shell
Tipp

Sie möchten mehr zum Thema MongoDB erfahren? In unserem Digital Guide werden Sie fündig. Wir erklären Ihnen zum Beispiel, wie der Befehl List Databases funktioniert und wie Sie mit MongoDB Sort die Reihenfolge Ihrer Datenausgabe festlegen.