MongoDB findOne: Anleitung mit Beispielen

Die Methode MongoDB findOne ist sehr erfolgreich bei der Suche innerhalb einer Sammlung. Sie gibt allerdings immer nur ein einziges Ergebnis aus, weshalb sie nicht für alle Anforderungen geeignet ist.

Was ist MongoDB findOne?

MongoDB ist ein Datenbankmanagementsystem, das durch seinen NoSQL-Ansatz und seine ausgeprägte Skalierbarkeit selbst große Datenmengen problemlos speichern und verwalten kann. Zwar ist dies ein großer Vorteil, gleichzeitig benötigt es dann aber auch starke Methoden, damit Nutzerinnen 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 Collections. Möchten Sie nun eines dieser Dokumente suchen und ausgeben lassen, haben Sie verschiedene Möglichkeiten. Neben dem allgemeineren MongoDB find ist insbesondere MongoDB findOne eine sehr effektive Methode, um selbst umfangreiche Datenbanken zielgenau zu filtern.

MongoDB findOne durchsucht sämtliche berücksichtigten Dokumente und Sammlungen nach bestimmten Kriterien, die von der Nutzerin oder dem Nutzer spezifiziert werden können. Die Besonderheit der Methode ist, dass sie immer nur exakt ein Dokument ausgibt, welches den hinterlegten Parametern entspricht. Gibt es nur ein Dokument, dass in der Suchanfrage auftaucht, so wird dieses berücksichtigt. Kommen mehrere Dokumente in Frage, gibt MongoDB findOne das Dokument aus, welches in der natürlichen Ordnung der Datenbank zuerst auftaucht. Wenn keine Dokumente bei der Suche gefunden werden können, erfolgt die Ausgabe „Null“.

Managed Database von IONOS

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

Hochverfügbar
Sicher
Individuell

Syntax und Besonderheiten von MongoDB findOne

Die grundsätzliche Syntax von MongoDB findOne ist sehr übersichtlich. Die Methode wird immer wie folgt angewendet:

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

Unter <query> werden die Suchparameter angeben, nach denen die Methode die Dokumente filtern soll. Diese Eingabe ist optional. Die Eingaben unter <projection> bestimmen, welche Felder für das angezeigte Dokument berücksichtigt werden. Die erlaubten Werte für die Ausgabe sind die booleschen Werte 1 (beziehungsweise wahr) und 0 (beziehungsweise falsch). Bleibt diese Angabe leer, so werden immer alle Felder angezeigt. Sie ist damit also auch optional. <options> ermöglicht es Ihnen, die Suche weiter zu modifizieren und auch die Anzeige zu ändern. Sie ist ebenfalls optional.

Hinweis

Um Sammlungen mit mehreren Suchparametern effizient zu durchsuchen, gibt es MongoDB Queries, die wir in einem weiteren Artikel genauer erklären. Queries basieren auf dem Befehl MongoDB find.

Sammlung zu Testzwecken erstellen

Wenn Sie MongoDB unter Linux, Windows oder Mac installiert haben und MongoDB findOne für sich nutzen möchten, lohnt es sich, zunächst eine Testumgebung einzurichten und diese für den ersten Einsatz der Methode zu nutzen. Die ersten Schritte mit der Datenbank zeigen wir Ihnen in unserem umfangreichen MongoDB-Tutorial. Für unser Beispiel stellen wir uns eine Mitarbeiterdatenbank vor, die fünf Einträge enthält und dazu Angaben zum Namen, dem Geschlecht und dem Alter des Mitarbeiters oder der Mitarbeiterin. Außerdem gibt es eine Info dazu, seit wann die Person im Unternehmen ist. Diese Sammlung sieht beispielhaft so aus:


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 durchsuchen und fünf Einträge finden, die es berücksichtigen muss. Da keine Dokumente ausgeschlossen werden, kommen alle fünf Mitarbeiter und Mitarbeiterinnen in Frage. Dementsprechend würde MongoDB findOne die erste Person auswählen, die in der Datenbank eingegeben 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 Normalfall werden Sie Ihre Suche allerdings spezifizieren wollen, damit Sie am Ende nicht irgendein Dokument, sondern das tatsächlich 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 einzigartig und kann so in unserem Beispiel immer exakt einer Mitarbeiterin oder einem Mitarbeiter zugeordnet werden. Wenn Sie MongoDB findOne also über die Objekt-ID durchführen, 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 allerdings die ID nicht kennen oder Ihre Sammlung nach anderen Parametern durchsuchen möchten, können Sie mit MongoDB findOne auch nach speziellen Feldern suchen. Auch hier gilt: Gibt es nur ein Dokument, das dem Parameter entspricht, so wird auch dieses angezeigt. Wenn allerdings mehrere Dokumente Ihren Suchkriterien entsprechen, gibt das System nur den ersten Eintrag aus. In unserem Beispiel suchen wir deshalb nach allen Einträgen, die als Geschlecht „Male“ angeben. Theoretisch hätten wir dadurch also zwei Treffer. Angezeigt wird allerdings nur der erste. So funktioniert der entsprechende Befehl:

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

Die Ausgabe zeigt dann den Mitarbeiter Herrn Schmidt:

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

MongoDB findOne: Suche spezifizieren

Natürlich haben Sie auch die Option, Ihre Suche weiter einzugrenzen und so etwaigen Überschneidungen vorzubeugen. In unserer kleinen Beispielsammlung mag das zwar nicht nötig sein, wenn Sie allerdings 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 heranziehen. So sieht das aus, wenn Sie einen Mitarbeiter anhand seines Geschlechts (männlich) und seines Alters identifizieren möchten:

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

Die Ausgabe zeigt dann wieder den Mitarbeiter Herrn Schmidt, der als einzige Person in der Sammlung männlich und 40 Jahre alt ist. Mitarbeiterin Frau Meyer hätte zwar dasselbe Alter gehabt, ist allerdings 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

Konditionen für ein Feld festlegen

Es ist außerdem möglich, Konditionen für ein bestimmtes Feld zu bestimmen und diese als Suchkriterium anzuwenden. Im folgenden Beispiel berücksichtigen wir nur Personen, die älter sind als 30 Jahre.

Dies ist die passende Eingabe:

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

So wird der Mitarbeiter Herr Jacob ausgeschlossen. Da Frau Schneider dem Kriterium entspricht 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 ausschließen mit MongoDB findOne

Gerade bei umfangreichen Sammlungen, die dazu noch viele Informationen enthalten, kann die Ausgabe unter Umständen unübersichtlich werden. Daher bietet MongoDB findOne die Möglichkeit, einzelne Felder für die Ausgabe auszuschließen. Im folgenden Beispiel möchten wir, dass die ID, das Geschlecht 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 erfolglose Suche

Wenn es allerdings keine Ergebnisse für Ihre Suche mit MongoDB findOne gibt, wird Ihnen auch das angezeigt. Wir suchen daher nach dem Mitarbeiter oder der Mitarbeiterin Schulz, die oder der nicht in der Sammlung aufgeführt wird.

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

Die Ausgabe sieht dann so aus:

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

Zur einfacheren Verwaltung Ihrer Datenbank gibt es die kostenlose grafische Benutzeroberfläche MongoDB Compass, die wir in einem anderen Artikel vorstellen.