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“.
- IONOS Cloud-Partner: Die Experten für Ihren Datenbank-Betrieb
- Flexibel: Maßgeschneiderte Datenbank-Lösungen ganz auf Ihre Bedürfnisse
- Rechenzentren in Deutschland: Ihre Daten sind sicher
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> )
shellUnter <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.
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
}
]
)
shellMongoDB 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 ( )
shellDies ist die passende Ausgabe:
db.mitarbeiter.findOne ( )
{
_id : ObjectID ( "529ete7300of4002bme148om" ),
name : "Schneider",
gender : "Female",
age : 56,
year : 2002
}
shellPer 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" ) } )
shellDie Ausgabe sollte dann so aussehen:
db.mitarbeiter.findOne ( { _id : ObjectID ( "582pfh773813tw982qj411l0" ) } )
{
_id : ObjectID ( "582pfh773813tw982qj411l0"
name : "Jacob",
gender : "Male",
age : 22,
year : 2022
}
shellMit 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" } )
shellDie Ausgabe zeigt dann den Mitarbeiter Herrn Schmidt:
db.mitarbeiter.findOne ( { gender : "Male" } )
{
_id : ObjectID ( "498p0t173mv489fh63th00kh"
name : "Schmidt",
gender : "Male",
age : 40,
year : 2019
}
shellMongoDB 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 } )
shellDie 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
}
shellKonditionen 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 } } )
shellSo 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
}
shellFelder 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 } )
shellDa alle weiteren Angaben angezeigt werden, erhalten Sie folgende Ausgabe:
db.mitarbeiter.findOne ( { name : "Schneider" }, { _id : 0, gender : 0, age : 0 } )
{
name : "Schneider",
year : 2002
}
shellBeispiel 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" } )
shellDie Ausgabe sieht dann so aus:
db.mitarbeiter.findOne ( { name : "Schulz" } )
null
shellZur einfacheren Verwaltung Ihrer Datenbank gibt es die kostenlose grafische Benutzeroberfläche MongoDB Compass, die wir in einem anderen Artikel vorstellen.