MongoDB Queries: So laufen deine Datenabfragen glatt
Mit MongoDB Queries durchsuchst und analysierst du deine Datenbank schnell und effektiv. Der Aufbau der Methode ist sehr logisch und erlaubt den Einsatz zahlreicher Parameter, mit denen du Anfragen spezifizieren kannst.
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.
Ist dir 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 ein benutzerfreundliches Tool, um komplexe Datenstrukturen zu durchsuchen. Sie folgen logischen Regeln und funktionieren wie die von vielen Websites bekannten Filteroptionen. Du hast dadurch die Möglichkeit, deine 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 du MongoDB Queries ganz einfach erstellen und so für dich nutzen kannst, erklären wir dir 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.
- Du musst MongoDB zunächst auf deinem Rechner installieren. Die Datenbank funktioniert auf vielen Betriebssystemen, sodass es für diese Anleitung keinen großen Unterschied macht, ob du Linux, OS X oder Windows verwendest. Die Arbeitsschritte über die Installation hinaus sind auf allen Systemen gleich und betreffen nur die Datenbank selbst. Wie die Installation funktioniert, erfährst du in unserem MongoDB-Tutorial.
- Voraussetzung für die Suchfunktion sind außerdem Administrationsrechte.
- Erstelle am besten zunächst eine Testumgebung, damit du die Methode ohne Gefahr ausprobieren kannst. Zu den dafür notwendigen Schritten kommen wir jetzt.
Aufbau einer Testsammlung
Öffne zuerst die Shell und logge dich mit deinen Daten als Administrator:in ein. Dann erstellst du eine neue Sammlung, die als Testumgebung für deine 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
}
}shellDieses Dokument enthält die folgenden Informationen:
- name: Der Name der Kundschaft, die 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 Kundschaft ist (unter dem Punkt „first“), wann die letzte Bestellung stattfand (unter dem Punkt „last“) und schließlich, wie oft insgesamt bestellt wurde (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 5 Einträge enthalten soll. Wenn du zu einem späteren Zeitpunkt MongoDB Queries professionell nutzt, kannst du deutlich umfangreichere Sammlungen erstellen. Dafür nutzt du 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,
}
}
] )shellWenn du diese Eingabe so oder mit deinen eigenen Daten ausführst, erhältst du 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 du dich versichern möchtest, dass alle Dokumente in die Sammlung übernommen wurden, kannst du MongoDB find verwenden und dabei auf zusätzliche Parameter verzichten:
db.kunden.find ( )shellDer Output ist eine Auflistung aller Objekt-IDs mit den kompletten Dokumenten, die du nun mit MongoDB Queries durchsuchen kannst.
Einzelne Felder mit MongoDB Queries abfragen
Bereits diese Ausgabe wird dir verdeutlichen, welchen Mehrwert dir MongoDB Queries bieten. Schon in unserem kleinen Beispiel wird die Ausgabe lange Zeichenketten hervorbringen, die eine Untersuchung ohne Hilfsmittel sehr erschweren. 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 alle Dokumente, deren Name dem Wert „ATS“ entspricht. Das sieht so aus:
db.kunden.find (
{ "name" : "ATS" }
)shellEinfache 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
}shellAuch der gegenteilige Weg funktioniert. Wenn du dir alle Ergebnisse außer dem Eintrag für „ATS“ anzeigen lassen möchtest, wähle folgende Eingabe und erhalte erneut eine sehr umfangreiche Ausgabe:
db.kunden.find (
{ "name" : { $ne : "ATS" } }
)shellMöchtest du hingegen MongoDB Queries mit verschiedenen Werten ausgeben, ist auch das mit einem Array möglich. In unserem Beispiel berücksichtigen wir die Kundschaft „ATS“ und „Jorgensen“.
db.kunden.find (
{ "name" : [ $in : [ "ATS", "Jorgensen" ] } }
)shellMehrere Felder mit MongoDB Queries abfragen
Gerade wenn du sehr exakte Ergebnisse benötigst, ist es wichtig, deine Anfrage noch weiter zu spezifizieren. Daher kannst du 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 }
)shellHier 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 }
)shellWenn du aber mit MongoDB Queries verschiedene Werte berücksichtigen möchtest, eine Eingabe aber schon stattfinden soll, wenn mindestens eine der Anforderungen erfüllt ist, gibst du dies ein:
db.kunden.find (
{ $or : [ {"name" : "ATS"}, { "units" : 25 } ] }
)shellWerte 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 du nun alle Kund:innen ausgeben möchtest, die mindestens eine Niederlassung in Deutschland haben, ist die Eingabe ganz einfach:
db.kunden.find (
{ "location" : "Germany" }
)shellDer Output enthält nun alle drei Einträge, die mindestens eine Niederlassung in Deutschland haben. Wenn du nun aber deine Eingabe erweiterst und Kund:innen mit Niederlassungen aus Deutschland und Österreich gleichzeitig abrufen möchtest, nutzt du dafür einen Array:
db.kunden.find (
{ "location" : [ "Germany", "Austria" ] }
)shellDu wirst 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 du allerdings Werte berücksichtigen willst, die in einer beliebigen Reihenfolge in einem Array stehen dürfen, ergänze die Anfrage folgendermaßen:
db.kunden.find (
{ "location" : { $all : [ "Germany", "Austria" ] } }
)shell