Mit MongoDB Queries durch­suchst und ana­ly­sierst du deine Datenbank schnell und effektiv. Der Aufbau der Methode ist sehr logisch und erlaubt den Einsatz zahl­rei­cher Parameter, mit denen du Anfragen spe­zi­fi­zie­ren kannst.

Samm­lun­gen effektiv durch­su­chen

Als do­ku­men­ten­ba­sier­te NoSQL-Lösung bietet MongoDB die Mög­lich­keit, auch große und viel­fäl­ti­ge Da­ten­men­gen einfach zu speichern und zu verwalten. Das Da­ten­bank­ma­nage­ment­sys­tem ist sehr flexibel und leicht ho­ri­zon­tal ska­lier­bar.

Anders als bei re­la­tio­na­len Da­ten­ban­ken werden hier die Daten in BSON-Do­ku­men­ten (Binary JSON) ge­spei­chert und in Coll­ec­tions oder Samm­lun­gen gebündelt. Damit dieser Ansatz auch wirklich funk­tio­niert, benötigt es starke Ab­fra­ge­me­cha­nis­men, die die Datenbank filtern und nur die wirklich be­nö­tig­ten In­for­ma­tio­nen prä­sen­tie­ren. Diese MongoDB Queries durch­su­chen selbst weit­ver­zweig­te Samm­lun­gen und liefern die gesuchten In­for­ma­tio­nen.

Tipp

Ist dir die Nutzung von MongoDB über die Shell zu un­über­sicht­lich? Mit MongoDB Compass gibt es eine kos­ten­lo­se grafische Be­nut­zer­ober­flä­che, die die Hand­ha­bung ver­ein­facht.

Was sind MongoDB Queries?

MongoDB Queries sind ein be­nut­zer­freund­li­ches Tool, um komplexe Da­ten­struk­tu­ren zu durch­su­chen. Sie folgen logischen Regeln und funk­tio­nie­ren wie die von vielen Websites bekannten Fil­ter­op­tio­nen. Du hast dadurch die Mög­lich­keit, deine Suche möglichst präzise zu for­mu­lie­ren und so die best­mög­li­chen Er­geb­nis­se zu erzielen. Das ist gerade auch deshalb wichtig, da MongoDB die Option bietet, viele ver­schie­de­ne Da­ten­ty­pen zu speichern. Ohne die not­wen­di­gen Fil­ter­mög­lich­kei­ten wäre es nur schwer­lich möglich, die Datenbank zu­frie­den­stel­lend 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 Vor­aus­set­zun­gen gibt es für MongoDB Queries?

Um MongoDB Queries nutzen zu können, sind nur wenige Vor­aus­set­zun­gen nötig.

  1. Du musst MongoDB zunächst auf deinem Rechner in­stal­lie­ren. Die Datenbank funk­tio­niert auf vielen Be­triebs­sys­te­men, sodass es für diese Anleitung keinen großen Un­ter­schied macht, ob du Linux, OS X oder Windows ver­wen­dest. Die Ar­beits­schrit­te über die In­stal­la­ti­on hinaus sind auf allen Systemen gleich und betreffen nur die Datenbank selbst. Wie die In­stal­la­ti­on funk­tio­niert, erfährst du in unserem MongoDB-Tutorial.
  2. Vor­aus­set­zung für die Such­funk­ti­on sind außerdem Ad­mi­nis­tra­ti­ons­rech­te.
  3. Erstelle am besten zunächst eine Test­um­ge­bung, damit du die Methode ohne Gefahr aus­pro­bie­ren kannst. Zu den dafür not­wen­di­gen Schritten kommen wir jetzt.

Aufbau einer Test­samm­lung

Öffne zuerst die Shell und logge dich mit deinen Daten als Ad­mi­nis­tra­tor:in ein. Dann erstellst du eine neue Sammlung, die als Test­um­ge­bung für deine ersten MongoDB Queries fungiert. Da die Methode nicht nur einfache Dokumente, sondern auch Arrays, ver­schie­de­ne Felder oder ein­ge­bun­de­ne Dokumente be­rück­sich­ti­gen kann, erstellen wir für eine De­mons­tra­ti­on des Umfangs der MongoDB Queries eine etwas kom­ple­xe­re Coll­ec­tion.

In unserem Beispiel ist dies eine Kun­den­lis­te. Das Format dieser Liste sieht fol­gen­der­ma­ß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 In­for­ma­tio­nen:

  • name: Der Name der Kund­schaft, die die Ware gekauft hat.
  • units: Die Anzahl der Produkte, die das Un­ter­neh­men insgesamt bestellt hat.
  • location: Der Sitz der anderen Firma. Gibt es mehrere Nie­der­las­sun­gen, können diese in Form eines Arrays ge­spei­chert werden.
  • tran­sac­tions: Dieses Feld enthält nun ein weiteres Dokument, welches ein­ge­schlos­sen wird (im Eng­li­schen spricht man von „embedded documents“ oder „nested documents“). Jedes dieser tran­sac­tions-Dokumente enthält In­for­ma­tio­nen darüber, seit wann das Un­ter­neh­men Kund­schaft ist (unter dem Punkt „first“), wann die letzte Be­stel­lung stattfand (unter dem Punkt „last“) und schließ­lich, wie oft insgesamt bestellt wurde (unter dem Punkt „total“).

In diesem Fall wurden die zu­sätz­li­chen Dokumente eingefügt, damit zu einem späteren Zeitpunkt noch weitere In­for­ma­tio­nen ergänzt werden können. Dies wahrt die Übersicht.

Er­stel­lung der Test­samm­lung 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 pro­fes­sio­nell nutzt, kannst du deutlich um­fang­rei­che­re Samm­lun­gen erstellen. Dafür nutzt du die Methode in­sert­Ma­ny. 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 du diese Eingabe so oder mit deinen eigenen Daten ausführst, erhältst du im Gegenzug eine Auf­lis­tung der zu­ge­ord­ne­ten Objekt-IDs. Diese sind ein­zig­ar­tig und sorgen dafür, dass jedes Dokument auch über die ID gefunden werden kann. Wenn du dich ver­si­chern möchtest, dass alle Dokumente in die Sammlung über­nom­men wurden, kannst du MongoDB find verwenden und dabei auf zu­sätz­li­che Parameter ver­zich­ten:

db.kunden.find ( )
shell

Der Output ist eine Auf­lis­tung aller Objekt-IDs mit den kom­plet­ten Do­ku­men­ten, die du nun mit MongoDB Queries durch­su­chen kannst.

Einzelne Felder mit MongoDB Queries abfragen

Bereits diese Ausgabe wird dir ver­deut­li­chen, welchen Mehrwert dir MongoDB Queries bieten. Schon in unserem kleinen Beispiel wird die Ausgabe lange Zei­chen­ket­ten her­vor­brin­gen, die eine Un­ter­su­chung ohne Hilfs­mit­tel sehr er­schwe­ren. Auch in der Folge nutzen wir daher die find-Methode, spe­zi­fi­zie­ren dabei aber unsere Suche. Dafür legen wir eine spezielle An­for­de­rung fest, die ein Dokument erfüllen muss, um aus­ge­ge­ben zu werden. In unserem Beispiel suchen wir alle Dokumente, deren Name dem Wert „ATS“ ent­spricht. Das sieht so aus:

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

Einfache MongoDB Queries dieser Art durch­su­chen nun alle hin­ter­leg­ten Dokumente in der ent­spre­chen­den Sammlung und gleichen ab, welche den Na­mens­wert „ATS“ haben. Dies betrifft in unserer Coll­ec­tion nur einen Eintrag, weshalb der Output fol­gen­der­ma­ß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 ge­gen­tei­li­ge Weg funk­tio­niert. Wenn du dir alle Er­geb­nis­se außer dem Eintrag für „ATS“ anzeigen lassen möchtest, wähle folgende Eingabe und erhalte erneut eine sehr um­fang­rei­che Ausgabe:

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

Möchtest du hingegen MongoDB Queries mit ver­schie­de­nen Werten ausgeben, ist auch das mit einem Array möglich. In unserem Beispiel be­rück­sich­ti­gen wir die Kund­schaft „ATS“ und „Jorgensen“.

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

Mehrere Felder mit MongoDB Queries abfragen

Gerade wenn du sehr exakte Er­geb­nis­se benötigst, ist es wichtig, deine Anfrage noch weiter zu spe­zi­fi­zie­ren. Daher kannst du MongoDB Queries durch zu­sätz­li­che Parameter noch genauer bestimmen. Wenn wir nun für eine Anfrage neben dem Fir­men­na­men „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 Über­ein­stim­mung. Sollte aber einer der beiden Werte nicht stimmen, wird auf diese Weise auch kein Ergebnis aus­ge­ge­ben. Folgende Eingabe würde zum Beispiel keinen Erfolg haben:

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

Wenn du aber mit MongoDB Queries ver­schie­de­ne Werte be­rück­sich­ti­gen möchtest, eine Eingabe aber schon statt­fin­den soll, wenn min­des­tens eine der An­for­de­run­gen erfüllt ist, gibst du dies ein:

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

Werte in Arrays abfragen

Auch Werte in Arrays können mit MongoDB Queries be­rück­sich­tigt werden. In unserem Beispiel gibt es Un­ter­neh­men, die Nie­der­las­sun­gen in mehreren Ländern haben. Wenn du nun alle Kund:innen ausgeben möchtest, die min­des­tens eine Nie­der­las­sung in Deutsch­land haben, ist die Eingabe ganz einfach:

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

Der Output enthält nun alle drei Einträge, die min­des­tens eine Nie­der­las­sung in Deutsch­land haben. Wenn du nun aber deine Eingabe er­wei­terst und Kund:innen mit Nie­der­las­sun­gen aus Deutsch­land und Ös­ter­reich gleich­zei­tig abrufen möchtest, nutzt du dafür einen Array:

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

Du wirst al­ler­dings merken, dass diese Eingabe lediglich ein Ergebnis zeigt, obwohl zwei Un­ter­neh­men theo­re­tisch den Such­kri­te­ri­en ent­spre­chen. Der Grund dafür ist, dass MongoDB Queries die exakte Eingabe und somit in diesem Fall die Rei­hen­fol­ge beachten. Wenn du al­ler­dings Werte be­rück­sich­ti­gen willst, die in einer be­lie­bi­gen Rei­hen­fol­ge in einem Array stehen dürfen, ergänze die Anfrage fol­gen­der­ma­ßen:

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