Die Methode MongoDB findOne ist sehr er­folg­reich bei der Suche innerhalb einer Sammlung. Sie gibt al­ler­dings immer nur ein einziges Ergebnis aus, weshalb sie nicht für alle An­for­de­run­gen geeignet ist.

Was ist MongoDB findOne?

MongoDB ist ein Da­ten­bank­ma­nage­ment­sys­tem, das durch seinen NoSQL-Ansatz und seine aus­ge­präg­te Ska­lier­bar­keit selbst große Da­ten­men­gen pro­blem­los speichern und verwalten kann. Zwar ist dies ein großer Vorteil, gleich­zei­tig benötigt es dann aber auch starke Methoden, damit Nut­ze­rin­nen und Nutzer bei der Arbeit mit der Datenbank die Übersicht behalten.

Das System speichert Daten jeder Art in Form eines BSON-Dokuments (Binary JSON) und bündelt diese Dokumente als Coll­ec­tions. Möchten Sie nun eines dieser Dokumente suchen und ausgeben lassen, haben Sie ver­schie­de­ne Mög­lich­kei­ten. Neben dem all­ge­mei­ne­ren MongoDB find ist ins­be­son­de­re MongoDB findOne eine sehr effektive Methode, um selbst um­fang­rei­che Da­ten­ban­ken zielgenau zu filtern.

MongoDB findOne durch­sucht sämtliche be­rück­sich­tig­ten Dokumente und Samm­lun­gen nach be­stimm­ten Kriterien, die von der Nutzerin oder dem Nutzer spe­zi­fi­ziert werden können. Die Be­son­der­heit der Methode ist, dass sie immer nur exakt ein Dokument ausgibt, welches den hin­ter­leg­ten Pa­ra­me­tern ent­spricht. Gibt es nur ein Dokument, dass in der Such­an­fra­ge auftaucht, so wird dieses be­rück­sich­tigt. Kommen mehrere Dokumente in Frage, gibt MongoDB findOne das Dokument aus, welches in der na­tür­li­chen Ordnung der Datenbank zuerst auftaucht. Wenn keine Dokumente bei der Suche gefunden werden können, erfolgt die Ausgabe „Null“.

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

Syntax und Be­son­der­hei­ten von MongoDB findOne

Die grund­sätz­li­che Syntax von MongoDB findOne ist sehr über­sicht­lich. Die Methode wird immer wie folgt an­ge­wen­det:

db.collection.findOne ( <query>, <projection>, <options> )
shell

Unter <query> werden die Such­pa­ra­me­ter angeben, nach denen die Methode die Dokumente filtern soll. Diese Eingabe ist optional. Die Eingaben unter <projection> bestimmen, welche Felder für das an­ge­zeig­te Dokument be­rück­sich­tigt werden. Die erlaubten Werte für die Ausgabe sind die boole­schen Werte 1 (be­zie­hungs­wei­se wahr) und 0 (be­zie­hungs­wei­se falsch). Bleibt diese Angabe leer, so werden immer alle Felder angezeigt. Sie ist damit also auch optional. <options> er­mög­licht es Ihnen, die Suche weiter zu mo­di­fi­zie­ren und auch die Anzeige zu ändern. Sie ist ebenfalls optional.

Hinweis

Um Samm­lun­gen mit mehreren Such­pa­ra­me­tern effizient zu durch­su­chen, gibt es MongoDB Queries, die wir in einem weiteren Artikel genauer erklären. Queries basieren auf dem Befehl MongoDB find.

Sammlung zu Test­zwe­cken erstellen

Wenn Sie MongoDB unter Linux, Windows oder Mac in­stal­liert haben und MongoDB findOne für sich nutzen möchten, lohnt es sich, zunächst eine Test­um­ge­bung ein­zu­rich­ten und diese für den ersten Einsatz der Methode zu nutzen. Die ersten Schritte mit der Datenbank zeigen wir Ihnen in unserem um­fang­rei­chen MongoDB-Tutorial. Für unser Beispiel stellen wir uns eine Mit­ar­bei­ter­da­ten­bank vor, die fünf Einträge enthält und dazu Angaben zum Namen, dem Ge­schlecht und dem Alter des Mit­ar­bei­ters oder der Mit­ar­bei­te­rin. Außerdem gibt es eine Info dazu, seit wann die Person im Un­ter­neh­men ist. Diese Sammlung sieht bei­spiel­haft so aus:

# Create Collection
db.mitarbeiter.insertMany ( [
    {
    name : "Schneider",
    gender : "Female",
    age : 56,
    year : 2002
    },
    {
    name : "Meyer",
    gender : "Female",
    age : 40,
    year : 2017,
    },
    {
    name : "Schmidt",
    gender : "Male",
    age : 40,
    year : 2019
    },
    {
    name : "Arslan",
    gender : "Female",
    age : 44,
    year : 2015
    },
    name : "Jacob",
    gender : "Male",
    age : 22,
    year : 2022
    }
]
)
shell

MongoDB findOne: Suche ohne Parameter

Wenn Sie nun die Methode MongoDB findOne ohne jegliche Parameter anwenden, wird das System Ihre Datenbank durch­su­chen und fünf Einträge finden, die es be­rück­sich­ti­gen muss. Da keine Dokumente aus­ge­schlos­sen werden, kommen alle fünf Mit­ar­bei­ter und Mit­ar­bei­te­rin­nen in Frage. Dem­entspre­chend würde MongoDB findOne die erste Person auswählen, die in der Datenbank ein­ge­ge­ben worden ist, weil die Methode immer nur ein Ergebnis ausspielt. So sieht das für unser Beispiel aus:

db.mitarbeiter.findOne ( )
shell

Dies ist die passende Ausgabe:

db.mitarbeiter.findOne ( )
{
    _id : ObjectID ( "529ete7300of4002bme148om" ),
    name : "Schneider",
    gender : "Female",
    age : 56,
    year : 2002
}
shell

Per ID nach Einträgen suchen

Im Nor­mal­fall werden Sie Ihre Suche al­ler­dings spe­zi­fi­zie­ren wollen, damit Sie am Ende nicht irgendein Dokument, sondern das tat­säch­lich benötigte erhalten. Auch dafür bietet MongoDB findOne die passenden Werkzeuge. Eine sehr sichere Methode ist die Suche per ID. Das _id-Feld ist in jedem Dokument ein­zig­ar­tig und kann so in unserem Beispiel immer exakt einer Mit­ar­bei­te­rin oder einem Mit­ar­bei­ter zu­ge­ord­net werden. Wenn Sie MongoDB findOne also über die Objekt-ID durch­füh­ren, werden Sie das richtige Ergebnis erhalten. In unserem Beispiel sieht das so aus:

db.mitarbeiter.findOne ( { _id : ObjectID ( "582pfh773813tw982qj411l0" ) } )
shell

Die Ausgabe sollte dann so aussehen:

db.mitarbeiter.findOne ( { _id : ObjectID ( "582pfh773813tw982qj411l0" ) } )
{
    _id : ObjectID ( "582pfh773813tw982qj411l0"
    name : "Jacob",
    gender : "Male",
    age : 22,
    year : 2022
}
shell

Mit MongoDB findOne spezielle Felder suchen

Wenn Sie al­ler­dings die ID nicht kennen oder Ihre Sammlung nach anderen Pa­ra­me­tern durch­su­chen möchten, können Sie mit MongoDB findOne auch nach spe­zi­el­len Feldern suchen. Auch hier gilt: Gibt es nur ein Dokument, das dem Parameter ent­spricht, so wird auch dieses angezeigt. Wenn al­ler­dings mehrere Dokumente Ihren Such­kri­te­ri­en ent­spre­chen, gibt das System nur den ersten Eintrag aus. In unserem Beispiel suchen wir deshalb nach allen Einträgen, die als Ge­schlecht „Male“ angeben. Theo­re­tisch hätten wir dadurch also zwei Treffer. Angezeigt wird al­ler­dings nur der erste. So funk­tio­niert der ent­spre­chen­de Befehl:

db.mitarbeiter.findOne ( { gender : "Male" } )
shell

Die Ausgabe zeigt dann den Mit­ar­bei­ter Herrn Schmidt:

db.mitarbeiter.findOne ( { gender : "Male" } )
{
    _id : ObjectID ( "498p0t173mv489fh63th00kh"
    name : "Schmidt",
    gender : "Male",
    age : 40,
    year : 2019
}
shell

MongoDB findOne: Suche spe­zi­fi­zie­ren

Natürlich haben Sie auch die Option, Ihre Suche weiter ein­zu­gren­zen und so etwaigen Über­schnei­dun­gen vor­zu­beu­gen. In unserer kleinen Bei­spiel­samm­lung mag das zwar nicht nötig sein, wenn Sie al­ler­dings mit mehreren Hundert oder gar Tausenden Einträgen arbeiten, werden Sie die Option zu schätzen wissen. MongoDB findOne erlaubt, dass Sie mehrere Felder zur Suche her­an­zie­hen. So sieht das aus, wenn Sie einen Mit­ar­bei­ter anhand seines Ge­schlechts (männlich) und seines Alters iden­ti­fi­zie­ren möchten:

db.mitarbeiter.findOne ( { gender : "Male", age: 40 } )
shell

Die Ausgabe zeigt dann wieder den Mit­ar­bei­ter Herrn Schmidt, der als einzige Person in der Sammlung männlich und 40 Jahre alt ist. Mit­ar­bei­te­rin Frau Meyer hätte zwar dasselbe Alter gehabt, ist al­ler­dings weiblich. Dies ist die passende Ausgabe:

db.mitarbeiter.findOne ( { gender : "Male", age: 40 } )
{
    _id : ObjectID ( "498p0t173mv489fh63th00kh"
    name : "Schmidt",
    gender : "Male",
    age : 40,
    year : 2019
}
shell

Kon­di­tio­nen für ein Feld festlegen

Es ist außerdem möglich, Kon­di­tio­nen für ein be­stimm­tes Feld zu bestimmen und diese als Such­kri­te­ri­um an­zu­wen­den. Im folgenden Beispiel be­rück­sich­ti­gen wir nur Personen, die älter sind als 30 Jahre.

Dies ist die passende Eingabe:

db.mitarbeiter.findOne ( { age : { $gt : 30 } } )
shell

So wird der Mit­ar­bei­ter Herr Jacob aus­ge­schlos­sen. Da Frau Schneider dem Kriterium ent­spricht und die erste Person in der Liste ist, wird sie wieder angezeigt:

db.mitarbeiter.findOne ( { age : { $gt : 30 } } )
{
    _id : ObjectID ( "529ete7300of4002bme148om" ),
    name : "Schneider",
    gender : "Female",
    age : 56,
    year : 2002
}
shell

Felder aus­schlie­ßen mit MongoDB findOne

Gerade bei um­fang­rei­chen Samm­lun­gen, die dazu noch viele In­for­ma­tio­nen enthalten, kann die Ausgabe unter Umständen un­über­sicht­lich werden. Daher bietet MongoDB findOne die Mög­lich­keit, einzelne Felder für die Ausgabe aus­zu­schlie­ßen. Im folgenden Beispiel möchten wir, dass die ID, das Ge­schlecht und das Alter nicht angezeigt werden.

db.mitarbeiter.findOne ( { name : "Schneider" }, { _id : 0, gender : 0, age : 0 } )
shell

Da alle weiteren Angaben angezeigt werden, erhalten Sie folgende Ausgabe:

db.mitarbeiter.findOne ( { name : "Schneider" }, { _id : 0, gender : 0, age : 0 } )
{
    name : "Schneider",
    year : 2002
}
shell

Beispiel für eine er­folg­lo­se Suche

Wenn es al­ler­dings keine Er­geb­nis­se für Ihre Suche mit MongoDB findOne gibt, wird Ihnen auch das angezeigt. Wir suchen daher nach dem Mit­ar­bei­ter oder der Mit­ar­bei­te­rin Schulz, die oder der nicht in der Sammlung auf­ge­führt wird.

db.mitarbeiter.findOne ( { name : "Schulz" }  )
shell

Die Ausgabe sieht dann so aus:

db.mitarbeiter.findOne ( { name : "Schulz" }  )
null
shell
Tipp

Zur ein­fa­che­ren Ver­wal­tung Ihrer Datenbank gibt es die kos­ten­lo­se grafische Be­nut­zer­ober­flä­che MongoDB Compass, die wir in einem anderen Artikel vor­stel­len.

Zum Hauptmenü