MongoDB Queries: So funktionieren die Datenabfragen

Mit MongoDB Queries durchsuchen und analysieren Sie Ihre Datenbank schnell und effektiv. Der Aufbau der Methode ist sehr logisch und erlaubt den Einsatz zahlreicher Parameter, mit denen Sie Anfragen spezifizieren können.

Sammlungen effektiv durchsuchen

Als dokumentenbasierte NoSQL-Lösung bietet MongoDB die Möglichkeit, auch große und vielfältige Datenmengen einfach zu speichern und zu verwalten. Das Datenbankmanagementsystem ist sehr flexibel und leicht horizontal skalierbar.

Anders als bei relationalen Datenbanken werden hier die Daten in BSON-Dokumenten (Binary JSON) gespeichert und in Collections oder Sammlungen gebündelt. Damit dieser Ansatz auch wirklich funktioniert, benötigt es starke Abfragemechanismen, die die Datenbank filtern und nur die wirklich benötigten Informationen präsentieren. Diese MongoDB Queries durchsuchen selbst weitverzweigte Sammlungen und liefern die gesuchten Informationen.

Tipp

Ist Ihnen die Nutzung von MongoDB über die Shell zu unübersichtlich? Mit MongoDB Compass gibt es eine kostenlose grafische Benutzeroberfläche, die die Handhabung vereinfacht.

Was sind MongoDB Queries?

MongoDB Queries sind dabei ein benutzerfreundliches Tool, um komplexe Datenstrukturen zu durchsuchen. Sie folgen logischen Regeln und funktionieren wie die von vielen Websites bekannten Filteroptionen. Sie haben dadurch die Möglichkeit, Ihre Suche möglichst präzise zu formulieren und so die bestmöglichen Ergebnisse zu erzielen. Das ist gerade auch deshalb wichtig, da MongoDB die Option bietet, viele verschiedene Datentypen zu speichern. Ohne die notwendigen Filtermöglichkeiten wäre es nur schwerlich möglich, die Datenbank zufriedenstellend zu verwalten. Wie Sie MongoDB Queries ganz einfach erstellen und so für sich nutzen können, erklären wir Ihnen nun Schritt für Schritt.

Welche Voraussetzungen gibt es für MongoDB Queries?

Um MongoDB Queries nutzen zu können, sind nur wenige Voraussetzungen nötig.

  1. Sie müssen MongoDB zunächst auf Ihrem Rechner installieren. Die Datenbank funktioniert auf vielen Betriebssystemen, sodass es für diese Anleitung keinen großen Unterschied macht, ob Sie Linux, OS X oder Windows verwenden. Die Arbeitsschritte über die Installation hinaus sind auf allen Systemen gleich und betreffen nur die Datenbank selbst. Wie die Installation funktioniert, erfahren Sie in unserem MongoDB-Tutorial.
  2. Voraussetzung für die Suchfunktion sind außerdem Administrationsrechte.
  3. Erstellen Sie am besten zunächst eine Testumgebung, damit Sie die Methode ohne Gefahr ausprobieren können. Zu den dafür notwendigen Schritten kommen wir jetzt.

Managed Database von IONOS

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

Hochverfügbar
Sicher
Individuell

Aufbau einer Testsammlung

Öffnen Sie zuerst die Shell und loggen Sie sich mit Ihren Daten als Administrator oder Administratorin ein. Dann erstellen Sie eine neue Sammlung, die als Testumgebung für Ihre ersten MongoDB Queries fungiert. Da die Methode nicht nur einfache Dokumente, sondern auch Arrays, verschiedene Felder oder eingebundene Dokumente berücksichtigen kann, erstellen wir für eine Demonstration des Umfangs der MongoDB Queries eine etwas komplexere Collection.

In unserem Beispiel ist dies eine Kundenliste. Das Format dieser Liste sieht folgendermaßen aus:

{
    "name" : "Schulz",
    "units" : 642,
    "location" : [ "Germany", "Austria" ],
    "transactions" : {
        "first" : {
            "year" : 2017,
        },
        "last" : {
            "year" : 2023,
        },
        "total" : 14
    }
}
shell

Dieses Dokument enthält die folgenden Informationen:

  • name: Der Name des Kundenunternehmens, das die Ware gekauft hat.
  • units: Die Anzahl der Produkte, die das Unternehmen insgesamt bestellt hat.
  • location: Der Sitz der anderen Firma. Gibt es mehrere Niederlassungen, können diese in Form eines Arrays gespeichert werden.
  • transactions: Dieses Feld enthält nun ein weiteres Dokument, welches eingeschlossen wird (im Englischen spricht man von „embedded documents“ oder „nested documents“). Jedes dieser transactions-Dokumente enthält Informationen darüber, seit wann das Unternehmen ein Kunde ist (unter dem Punkt “first”), wann die letzte Bestellung stattfand (unter dem Punkt “last”) und schließlich, wie oft es insgesamt bestellt hat (unter dem Punkt “total”).

In diesem Fall wurden die zusätzlichen Dokumente eingefügt, damit zu einem späteren Zeitpunkt noch weitere Informationen ergänzt werden können. Dies wahrt die Übersicht.

Erstellung der Testsammlung für die MongoDB Queries

Jetzt erstellen wir eine Sammlung mit dem Namen „Kunden“, die für unser Beispiel zur besseren Übersicht lediglich fünf Einträge enthalten soll. Wenn Sie zu einem späteren Zeitpunkt MongoDB Queries professionell nutzen, können Sie deutlich umfangreichere Sammlungen erstellen. Dafür nutzen Sie die Methode insertMany. Für unser Beispiel sieht das so aus:

db.kunden.insertMany ( [
{
    "name" : "Schulz",
    "units" : 642,
    "location" : [ "Germany", "Austria" ],
    "transactions" : {
        "first" : {
            "year" : 2017,
        },
        "last" : {
            "year" : 2023,
        },
        "total" : 14
    }
},
{
    "name" : "ATS",
    "units" : 17,
    "location" : "France",
    "transactions" : {
        "first" : {
            "year" : 2021,
        },
        "last" : {
            "year" : 2022,
        },
        "total" : 2,
    }
},
{
    "name" : "Meyer",
    "units" : 814,
    "location" : [ "Austria", "Germany" ],
    "transactions" : {
        "first" : {
            "year" : 2016,
        },
        "last" : {
            "year" : 2023,
        },
        "total" : 22,
    }
},
{
    "name" : "Pawolski",
    "units" : 313,
    "location" : [ "Germany", "Poland" ],
    "transactions" : {
            "first" : {
            "year" : 2017,
            },
        "last" : {
            "year" : 2020,
        },
        "total" : 9,
    }
},
{
    "name" : "Jorgensen",
    "units" : 7,
    "location" : "Denmark",
    "transactions" : {
        "first" : {
            "year" : 2022,
        },
        "last" : {
            "year" : 2023,
        },
        "total" : 2,
    }
}
] )
shell

Wenn Sie diese Eingabe so oder mit Ihren eigenen Daten ausführen, erhalten Sie im Gegenzug eine Auflistung der zugeordneten Objekt-IDs. Diese sind einzigartig und sorgen dafür, dass jedes Dokument auch über die ID gefunden werden kann. Wenn Sie sich versichern möchten, dass alle Dokumente in die Sammlung übernommen wurden, können Sie MongoDB find verwenden und dabei auf zusätzliche Parameter verzichten:

db.kunden.find ( )
shell

Der Output ist eine Auflistung aller Objekt-IDs mit den kompletten Dokumenten, die Sie nun mit MongoDB Queries durchsuchen können.

Einzelne Felder mit MongoDB Queries abfragen

Bereits diese Ausgabe wird Ihnen allerdings verdeutlichen, welchen Mehrwert Ihnen MongoDB Queries bieten. Schon in unserem kleinen Beispiel wird die Ausgabe lange Zeichenketten hervorbringen, die eine Untersuchung ohne Hilfsmittel mindestens sehr erschwert. Auch in der Folge nutzen wir daher die find-Methode, spezifizieren dabei aber unsere Suche. Dafür legen wir eine spezielle Anforderung fest, die ein Dokument erfüllen muss, um ausgegeben zu werden. In unserem Beispiel suchen wir so alle Dokumente, deren Name dem Wert „ATS“ entsprechen. Das sieht so aus:

db.kunden.find (
    { "name" : "ATS" }
)
shell

Einfache MongoDB Queries dieser Art durchsuchen nun alle hinterlegten Dokumente in der entsprechenden Sammlung und gleichen ab, welche den Namenswert „ATS“ haben. Dies betrifft in unserer Collection nur einen Eintrag, weshalb der Output folgendermaßen aussieht:

db.kunden.find ( { "name" : "ATS" } )
{
    "_id" : ObjectID ( "673d14684o75iftbb0ct5003" ),
    "name" : "ATS",
    "units" : 17,
    "location" : "France",
    "transactions" : {
        "first" : {
            "year" : 2021,
        },
        "last" : {
            "year" : 2022,
        },
        "total" : 2
    }
shell

Auch der gegenteilige Weg funktioniert. Wenn Sie sich alle Ergebnisse außer dem Eintrag für „ATS“ anzeigen lassen möchten, wählen Sie folgende Eingabe und erhalten erneut eine sehr umfangreiche Ausgabe:

db.kunden.find (
    { "name" : { $ne : "ATS" } }
)
shell

Möchten Sie hingegen MongoDB Queries mit verschiedenen Werten ausgeben, ist auch das mit einem Array möglich. In unserem Beispiel berücksichtigen wir die Kunden „ATS“ und „Jorgensen“.

db.kunden.find (
    { "name" : [ $in : [ "ATS", "Jorgensen" ] } }
)
shell

Mehrere Felder mit MongoDB Queries abfragen

Gerade wenn Sie sehr exakte Ergebnisse benötigen, ist es allerdings wichtig, Ihre Anfrage noch weiter zu spezifizieren. Daher können Sie MongoDB Queries durch zusätzliche Parameter noch genauer bestimmen. Wenn wir nun für eine Anfrage neben dem Firmennamen „ATS“ auch den Wert aus dem Segment „units“ angeben, wird nach einem Dokument gesucht, welches beide Werte enthält:

db.kunden.find (
    { "name" : "ATS", "units" : 17 }
)
shell

Hier gibt es wieder eine exakte Übereinstimmung. Sollte aber einer der beiden Werte nicht stimmen, wird auf diese Weise auch kein Ergebnis ausgegeben. Folgende Eingabe würde zum Beispiel keinen Erfolg haben:

db.kunden.find (
    { "name" : "ATS", "units" : 25 }
)
shell

Wenn Sie aber mit MongoDB Queries verschiedene Werte berücksichtigen möchten, eine Eingabe aber schon stattfinden soll, wenn mindestens eine der Anforderungen erfüllt ist, geben Sie dies ein:

db.kunden.find (
    { $or : [ {"name" : "ATS"}, { "units" : 25 } ] }
)
shell

Werte in Arrays abfragen

Auch Werte in Arrays können mit MongoDB Queries berücksichtigt werden. In unserem Beispiel gibt es Unternehmen, die Niederlassungen in mehreren Ländern haben. Wenn Sie nun alle Kunden ausgeben möchten, die mindestens eine Niederlassung in Deutschland haben, ist die Eingabe ganz einfach:

db.kunden.find (
    { "location" : "Germany" }
)
shell

Der Output enthält nun alle drei Kunden, die mindestens eine Niederlassung in Deutschland haben. Wenn Sie nun aber Ihre Eingabe erweitern und Kunden mit Niederlassungen aus Deutschland und Österreich gleichzeitig abrufen möchten, nutzen Sie dafür einen Array:

db.kunden.find (
    { "location" : [ "Germany", "Austria" ] }
)
shell

Sie werden allerdings merken, dass diese Eingabe lediglich ein Ergebnis zeigt, obwohl zwei Unternehmen theoretisch den Suchkriterien entsprechen. Der Grund dafür ist, dass MongoDB Queries die exakte Eingabe und somit in diesem Fall die Reihenfolge beachten. Wenn Sie allerdings Werte berücksichtigen wollen, die in einer beliebigen Reihenfolge in einem Array stehen dürfen, ergänzen Sie die Anfrage folgendermaßen:

db.kunden.find (
    { "location" : { $all : [ "Germany", "Austria" ] } }
)
shell

MongoDB Queries für eingebundene Dokumente

In unserem Beispiel haben wir zusätzlich eingebundene Dokumente verwendet. Auch diese können mit MongoDB Queries ausgegeben werden. Dafür müssen Sie einen Punkt einbauen, um MongoDB zu signalisieren, dass die Felder in einem eingebundenen Dokument analysiert werden sollen. Wenn Sie zum Beispiel eine Auflistung aller Kunden haben möchten, die mehr als zehn Bestellvorgänge aufweisen, geben Sie dies ein:

db.kunden.find (
    { "transactions.total" : { $gt : 10 } }
)
shell

So greift MongoDB auf das Dokument „transactions“ zu und berücksichtigt dann die Anzahl der Bestellvorgänge unter „total“.

MongoDB Queries: Ausgabe beschränken

Auch mit den bisher erlernten Methoden kann die Ausgabe der MongoDB Queries allerdings sehr umfangreich ausfallen. Daher kann es sinnvoll sein, dass Sie die Ausgabe nur auf einige Felder beschränken. Dafür werden sogenannte Projektionen genutzt. Diese enthalten den Wert 1 (für enthaltene Felder) und 0 (für Felder, die ausgeschlossen werden sollen). Im folgenden Beispiel führen wir eine zweiteilige Anfrage durch. Zunächst wird eine Suche ohne Parameter initiiert, die alle Informationen beinhalten würde. Direkt danach wird allerdings eine Projektion durchgeführt, die lediglich das Feld für den Namen berücksichtigt.

db.kunden.find (
    { }
    { "name" : 1 }
)
shell

So erhalten Sie zwar alle Ergebnisse, die Ausgabe beschränkt sich aber auf die jeweiligen Namen.

Cursors nutzen, um die Ausgabe zu optimieren

Cursors sind eine Methode, um nicht die Ergebnisse der MongoDB Queries selbst zu reglementieren, sondern deren Widergabe anzupassen. So können Sie unter anderem die Anzahl der Ergebnisse beschränken oder ihre Reihenfolge ändern. Möchten Sie lediglich ein zwei der Ergebnisse anzeigen, nutzen Sie die Methode limit. Dies funktioniert so:

db.kunden.find (
    { }
    { "name" : 1 }
).limit ( 2 )
shell

Mit der folgenden Angabe sortieren Sie die Ausgabe um. So werden die drei Kunden angezeigt, die die wenigsten Produkte bestellt haben:

db.kunden.find (
    { }
    { "name" : 1 }
).limit ( 2 ) .sort ( { "units" : 1 } )
shell
Tipp

Um gezielt ein Dokument in Ihrer Datenbank zu finden, gibt es die Methode MongoDB findONE. Wir erklären das in einem anderen Artikel genauer.