MongoDB Ag­gre­ga­ti­on ist ein wert­vol­les Tool, wenn Sie Ihre Da­ten­ban­ken ana­ly­sie­ren oder filtern möchten. Durch das Pipeline-System ist es möglich, Anfragen und damit auch Ausgaben sehr in­di­vi­du­ell zu spe­zi­fi­zie­ren.

Was ist Ag­gre­ga­ti­on in MongoDB?

MongoDB ist eine nicht­re­la­tio­na­le und do­ku­men­ten­ori­en­tier­te Datenbank, die für den Einsatz mit großen und viel­fäl­ti­gen Da­ten­men­gen ausgelegt ist. Durch den Verzicht auf starre Tabellen und Techniken wie das Sharding, bei dem die Daten auf ver­schie­de­nen Kno­ten­punk­ten ge­spei­chert werden, kann die NoSQL-Lösung ho­ri­zon­tal skaliert werden und bleibt dabei sehr flexibel und vor Ausfällen geschützt. Die Dokumente im binären JSON-Format BSON werden in so­ge­nann­ten Samm­lun­gen (Coll­ec­tions) gebündelt und lassen sich mit der MongoDB Query Language abfragen und be­ar­bei­ten. Auch wenn diese Sprache sehr viele Optionen bietet, eignet sie sich nicht bzw. nur un­zu­rei­chend für die Da­ten­ana­ly­se. Für diesen Vorgang bietet MongoDB Ag­gre­ga­ti­on.

Unter diesem Begriff versteht man in der In­for­ma­tik ver­schie­de­ne Vorgänge. In Bezug auf MongoDB meint Ag­gre­ga­ti­on die Er­mitt­lung zu­sam­men­ge­fass­ter In­for­ma­tio­nen. Dafür werden Daten aus einem oder ver­schie­de­nen Do­ku­men­ten auf bestimmte de­fi­nier­te Faktoren hin ana­ly­siert und gefiltert. Am Ende dieses Vorgangs steht ein einzelnes und klares Ergebnis. Im Folgenden erklären wir Ihnen nicht nur, welche Mög­lich­kei­ten zur um­fang­rei­chen Da­ten­ana­ly­se Ihnen MongoDB Ag­gre­ga­ti­on bietet, sondern zeigen auch, wie Sie die aggregate ( )-Methode für das Da­ten­bank­ma­nage­ment­sys­tem bei­spiel­haft einsetzen können.

MongoDB Ag­gre­ga­ti­on: Vor­be­rei­tun­gen und Vor­aus­set­zun­gen

Wenn Sie MongoDB Ag­gre­ga­ti­on nutzen möchten, müssen nur wenige Vor­aus­set­zun­gen erfüllt sein. Die Methode wird in der Shell aus­ge­führt und funk­tio­niert nach logischen Regeln, die Sie für Ihre in­di­vi­du­el­len An­for­de­run­gen anwenden können. Dafür muss MongoDB bereits auf Ihrem Rechner in­stal­liert sein. Wie Sie die Datenbank down­loa­den, in­stal­lie­ren und erstmals ausführen, erfahren Sie in unserem um­fang­rei­chen MongoDB-Tutorial. Sie sollten außerdem eine leis­tungs­star­ke Firewall nutzen und Ihre Datenbank bereits nach allen gängigen Si­cher­heits­stan­dards ein­ge­rich­tet haben. Um MongoDB Ag­gre­ga­ti­on durch­zu­füh­ren, benötigen Sie Ad­mi­nis­tra­ti­ons­rech­te. Die Datenbank arbeitet platt­form­über­grei­fend, die im weiteren Verlauf be­schrie­be­nen Schritte gelten somit für alle Be­triebs­sys­te­me glei­cher­ma­ßen.

Managed Database Services
Da­ten­ban­ken – Auf´s We­sent­li­che kon­zen­trie­ren
  • IONOS Cloud-Partner: Die Experten für Ihren Datenbank-Betrieb
  • Flexibel: Maß­ge­schnei­der­te Datenbank-Lösungen ganz auf Ihre Be­dürf­nis­se
  • Re­chen­zen­tren in Deutsch­land: Ihre Daten sind sicher

Die Rolle der Pipeline für die MongoDB Ag­gre­ga­ti­on

Sie haben auch in MongoDB die Mög­lich­keit, einfache Suchen oder Anfragen durch­zu­füh­ren. Die Datenbank wird Ihnen dann umgehend die ge­wünsch­ten Er­geb­nis­se aus­spie­len. Diese Methode ist al­ler­dings stark limitiert, da sie lediglich Er­geb­nis­se anzeigen kann, die bereits innerhalb der hin­ter­leg­ten Dokumente exis­tie­ren. Für eine tie­fer­ge­hen­de Analyse, wie­der­keh­ren­de Muster oder wei­ter­füh­ren­de In­for­ma­tio­nen ist diese Art der Abfrage nicht vor­ge­se­hen. Manchmal jedoch müssen un­ter­schied­li­che Quellen innerhalb einer Datenbank be­rück­sich­tigt werden, um sinnvolle Rück­schlüs­se ziehen zu können. Für solche An­for­de­run­gen kommt MongoDB Ag­gre­ga­ti­on zum Einsatz. Um ein Ergebnis zu erzielen, bedient sich die Methode so­ge­nann­ter Pipelines.

Welche Funktion hat die Pipeline?

Ag­gre­ga­ti­on Pipelines in MongoDB sind Verfahren, bei denen die vor­han­de­nen Daten mit Hilfe un­ter­schied­li­cher Zwi­schen­schrit­te ana­ly­siert und gefiltert werden, um Nut­ze­rin­nen und Nutzern das gesuchte Ergebnis anzeigen zu können. Diese Zwi­schen­schrit­te be­zeich­net man als Stages. Je nach An­for­de­rung können eine Stage oder mehrere Stages initiiert werden. Diese werden dann hin­ter­ein­an­der aus­ge­führt und verändern Ihren ur­sprüng­li­chen Input so, dass am Ende der gesuchte Output angezeigt werden kann. Während sich der Input dabei aus zahl­rei­chen Daten zu­sam­men­setzt, ist der Output – also das End­ergeb­nis – singulär. Welche un­ter­schied­li­chen Stages Ihnen MongoDB Ag­gre­ga­ti­on bietet, erläutern wir Ihnen gleich.

Welche Syntax hat die Pipeline der MongoDB Ag­gre­ga­ti­on?

Zunächst lohnt sich ein kurzer Blick auf die grund­sätz­li­che Syntax von MongoDB Ag­gre­ga­ti­on. Die Methode ist immer nach demselben Schema aufgebaut und kann dann für Ihre spe­zi­fi­schen An­for­de­run­gen angepasst werden. Der grund­sätz­li­che Aufbau sieht so aus:

db.collection_name.aggregate ( pipeline, options )
shell

Dabei ist collection_name der Name der be­rück­sich­tig­ten Sammlung. Unter pipeline werden die be­nö­tig­ten oder ge­wünsch­ten Stages von MongoDB Ag­gre­ga­ti­on auf­ge­führt und options kann für weitere optionale Parameter genutzt werden, die die benötigte Ausgabe spe­zi­fi­zie­ren.

Welche Stages gibt es?

Es gibt zahl­rei­che Stages für die Pipeline in MongoDB Ag­gre­ga­ti­on. Die meisten können auch mehrfach innerhalb einer Pipeline verwendet werden. Es würde den Rahmen sprengen, alle Optionen hier auf­zu­lis­ten, zumal einige nur für sehr spe­zi­fi­sche Ope­ra­tio­nen benötigt werden. Um Ihnen al­ler­dings einen Eindruck zu ver­mit­teln, listen wir hier ein paar der meist­ge­nutz­ten Stages auf:

  • $count: Mit dieser Stage erhalten Sie eine Angabe, wie viele BSON-Dokumente für die Stage oder Stages in dieser Pipeline be­rück­sich­tigt wurden.
  • $group: Diese Stage sortiert und bündelt die Dokumente nach be­stimm­ten Pa­ra­me­tern.
  • $limit: Mit dieser Stage re­du­zie­ren Sie die an­ge­zeig­ten Dokumente.
  • $match: Mit der Stage $match li­mi­tie­ren Sie die Dokumente, die für die folgende Stage her­an­ge­zo­gen werden.
  • $out: Mit dieser Stage werden die Er­geb­nis­se der MongoDB Ag­gre­ga­ti­on in die Coll­ec­tion auf­ge­nom­men. 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 Do­ku­men­ten. 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 al­ler­dings nicht verändert.
  • $unset: $unset schließt bestimmte Felder aus und funk­tio­niert somit als Gegensatz zu $project.

MongoDB Ag­gre­ga­ti­on: Einige prak­ti­sche Beispiele

Damit Sie besser verstehen, wie MongoDB Ag­gre­ga­ti­on in der Praxis funk­tio­niert, zeigen wir Ihnen nun ein paar Beispiele für un­ter­schied­li­che Stages und wie Sie diese verwenden. Wenn Sie MongoDB Ag­gre­ga­ti­on nutzen möchten, öffnen Sie die Shell als Ad­mi­nis­tra­tor bzw. Ad­mi­nis­tra­to­rin. Im Nor­mal­fall 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 be­stimm­tes Produkt gekauft haben. Diese Datenbank enthält der Übersicht halber nur zehn Dokumente, die alle nach demselben Schema aufgebaut sind. Dieses sieht bei­spiel­haft so aus:

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

Die In­for­ma­tio­nen, die für alle Käu­fe­rin­nen und Käufer bekannt sind, sind also der Name, ihr Wohnort, ihr Land und die Anzahl der gekauften Produkte.

Wenn Sie nun MongoDB Ag­gre­ga­ti­on aus­pro­bie­ren möchten, verwenden Sie die Methode insertMany ( ), um sämtliche Dokumente mit Kun­den­da­ten zu der Coll­ec­tion „kunden“ hin­zu­zu­fü­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 aus­ge­ge­ben.

So nutzen Sie $match

Um die Mög­lich­kei­ten der MongoDB Ag­gre­ga­ti­on zu ver­an­schau­li­chen, wenden wir auf unsere Sammlung „kunden“ zuerst die Stage $match an. Ohne weitere Parameter würde diese uns einfach die komplette Liste der oben auf­ge­führ­ten Kun­den­da­ten ausgeben. Im folgenden Beispiel weisen wir die Methode al­ler­dings an, uns lediglich Kunden und Kundinnen aus Italien an­zu­zei­gen. Der passende Befehl sieht fol­gen­der­ma­ßen aus:

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

Die Ausgabe wird Ihnen nun lediglich die Objekt-IDs und Daten der beiden ita­lie­ni­schen Kunden oder Kundinnen anzeigen.

$sort für einen besseren Überblick

Möchten Sie Ihre Kun­den­da­ten­bank sortieren, können Sie MongoDB Ag­gre­ga­ti­on mit der Stage $sort verwenden. Im folgenden Beispiel weisen wir das System an, alle Kun­den­da­ten 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 an­ge­wen­de­ten Stages werden Sie sehen, dass der Output ver­gleichs­wei­se um­fang­reich ist. Neben den ei­gent­li­chen In­for­ma­tio­nen innerhalb der Dokumente wird so zum Beispiel auch immer die Objekt-ID mit­aus­ge­ge­ben. Mithilfe von $project können Sie in der MongoDB Ag­gre­ga­ti­on Pipeline selbst bestimmen, welche In­for­ma­tio­nen aus­ge­ge­ben werden sollen. Hierfür legen wir für benötigte Felder den Wert 1 und für über­flüs­si­ge Felder den Wert 0 fest. In unserem Beispiel möchten wir lediglich den Kun­den­na­men 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 Ag­gre­ga­ti­on kom­bi­nie­ren

MongoDB Ag­gre­ga­ti­on gibt Ihnen auch immer die Mög­lich­keit, mehrere Stages hin­ter­ein­an­der an­zu­wen­den. Diese werden dann nach­ein­an­der durch­lau­fen, und am Ende steht eine Ausgabe, die alle ge­wünsch­ten Parameter be­rück­sich­tigt. Wenn Sie zum Beispiel lediglich die Namen und Käufe der deutschen Kundinnen und Kunden in ab­stei­gen­der Rei­hen­fol­ge anzeigen lassen möchten, nutzen Sie die oben be­schrie­be­nen 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 funk­tio­niert und wie Sie mit MongoDB Sort die Rei­hen­fol­ge Ihrer Da­ten­aus­ga­be festlegen.

734d2d2f076815e13ccd4a13d17ecbf3
Zum Hauptmenü