Einführung
Datenbanksysteme wie MongoDB werden typischerweise mit einer externen Anwendung verwendet, die sich mit dem Datenbankserver verbindet und Operationen wie das Lesen und Verarbeiten von Daten oder das Schreiben neuer Einträge durchführt. In solchen Fällen interagieren Sie nicht direkt mit dem Datenbankserver. Ein direkter Zugriff kann jedoch erforderlich sein, um administrative Aufgaben an der Datenbank durchzuführen oder Ad-hoc-Datenbankabfragen auszuführen.
Hier kommt die MongoDB-Shell ins Spiel. Die MongoDB-Shell ist eine interaktive Konsole, mit der Sie sich mit dem Datenbankserver verbinden und Befehle ausführen können. So lassen sich administrative Aufgaben erledigen sowie Daten direkt lesen, schreiben oder bearbeiten. Die MongoDB-Shell ermöglicht die Verbindung zur Datenbank über die Kommandozeile und die interaktive Arbeit in einem Terminalfenster. Außerdem können Sie externe Skripte ausführen, um wiederkehrende Aufgaben einfacher zu erledigen.
In diesem Tutorial verwenden Sie die MongoDB-Shell, um eine Verbindung zu einer MongoDB-Datenbank herzustellen und interaktiv Abfragen durchzuführen. Sie nutzen außerdem das integrierte Hilfesystem und die Autovervollständigungsfunktionen der Shell.
Voraussetzungen
- Ein Server mit einem regulären Benutzer (kein Root-Benutzer) mit sudo-Rechten und einer mit UFW konfigurierten Firewall. Dieses Tutorial wurde auf einem Server mit Ubuntu 20.04 getestet.
- MongoDB ist auf Ihrem Server installiert.
- Ihre MongoDB-Serverinstanz ist durch die Aktivierung der Authentifizierung und die Erstellung eines Administratorbenutzers gesichert.
Hinweis: Die zugehörigen Anleitungen zur Serverkonfiguration, Installation und sicheren Installation von MongoDB beziehen sich auf Ubuntu 20.04. Diese Anleitung konzentriert sich auf MongoDB selbst, nicht auf das zugrundeliegende Betriebssystem. Solange die Authentifizierung aktiviert ist, funktioniert es in der Regel mit jeder MongoDB-Installation unabhängig vom Betriebssystem.
Schritt 1 – Verbindung zum MongoDB-Server herstellen
Um eine MongoDB-Shell zu öffnen, führen Sie den Befehl `mongo` in der Server-Eingabeaufforderung aus. Standardmäßig öffnet der Befehl `mongo` eine Shell, die eine Verbindung zu einer lokal installierten MongoDB-Instanz herstellt, die auf Port 27017 läuft.
Führen Sie den Befehl mongo ohne zusätzliche Parameter aus:
mongo
Dies gibt eine Willkommensnachricht mit Informationen zum Server, mit dem die Shell verbunden ist, sowie zur installierten MongoDB-Version aus. Das folgende Beispiel zeigt den MongoDB-Server, der auf 127.0.0.1 (einer Loopback-Schnittstelle, die localhost repräsentiert) auf dem Standard-MongoDB-Port (27017) und in Version 4.4.6 läuft.
Output
MongoDB shell version v4.4.6
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("b9a48dc7-e821-4b09-a753-429eedf072c5") }
MongoDB server version: 4.4.6Versuchen Sie, alle Datenbanken auf dem Server aufzulisten. Geben Sie nach dem Shell-Befehl „show dbs“ ein und drücken Sie die Eingabetaste.
show dbsSofern Sie die erforderliche Anleitung zur Absicherung von MongoDB befolgt haben, liefert dieser Befehl keine Ausgabe. Der Grund dafür ist, dass Sie, obwohl der MongoDB-Server läuft und die Shell eine Verbindung herstellen konnte, keine Authentifizierungsinformationen angegeben haben. Daher verfügen Sie über keine Zugriffsrechte für die Datenbanken des Servers, und der Befehl `show dbs` gibt keine Ausgabe zurück.
Beenden Sie das Programm mit folgendem Befehl:
exitDie Mongo-Shell gibt eine kurze Abschiedsnachricht aus und kehrt zur System-Shell zurück:
Output
byeHinweis: Anstatt den Befehl exit einzugeben, kann die Shell alternativ auch mit der Tastenkombination STRG+C geschlossen werden.
Verbinden Sie nun die MongoDB-Shell erneut mit dem Datenbankserver, geben Sie diesmal jedoch einen Benutzernamen und ein Passwort für die korrekte Authentifizierung Ihrer MongoDB-Instanz an. Dazu müssen Sie zusätzliche Befehlszeilenparameter angeben, wie im folgenden Beispiel:
mongo -u AdminSammy -p --authenticationDatabase adminDieser Befehl besteht aus mehreren Teilen:
- -u: Mit diesem Flag wird der Benutzername für die Authentifizierung auf dem MongoDB-Server festgelegt.
- -p: Diese Option weist die MongoDB-Shell an, beim Verbindungsaufbau zur Datenbank ein Passwort zu verwenden. Nach dem Drücken der Eingabetaste werden Sie im Terminalfenster zur Eingabe eines Passworts aufgefordert.
- --authenticationDatabase: Diese Option gibt die Benutzerauthentifizierungsdatenbank an, mit der Sie sich anmelden. Normalerweise werden Administratorkonten in der Admin-Datenbank verwaltet. Wenn Ihre Benutzerauthentifizierungsdatenbank jedoch abweicht, geben Sie diese Datenbank anstelle von „admin“ an.
Hinweis: Um eine Verbindung zu einem MongoDB-Server herzustellen, der auf einem anderen Rechner als localhost läuft, können Sie den Parameter -h und anschließend die IP-Adresse Ihres Servers zum Shell-Befehl hinzufügen.
Geben Sie das während der Installation festgelegte Passwort ein, und Sie haben wieder Zugriff auf die Shell.
Führen Sie nun den Befehl „show dbs“ erneut aus:
show dbs
Diesmal liefert der Befehl eine Liste aller Datenbanken auf dem System zurück:
Output
admin 0.000GB
config 0.000GB
local 0.000GBDa Sie als privilegierter Benutzer authentifiziert sind, erlaubt Ihnen die Shell, Befehle auf jeder dieser Datenbanken auszuführen.
Nachdem Sie nun erfolgreich eine Verbindung zum MongoDB-Server über die MongoDB-Shell hergestellt haben, können Sie lernen, wie Sie Befehle in der Shell ausführen.
Schritt 2 – Führen Sie die Befehle aus
Wie andere Kommandozeilenschnittstellen nimmt auch die MongoDB-Shell Befehle entgegen und gibt die gewünschten Ergebnisse auf der Standardausgabe aus. Wie bereits erwähnt, werden in der MongoDB-Shell alle Befehle in der Kommandozeile eingegeben, die durch ein Größer-als-Zeichen (>) gekennzeichnet ist. Durch Drücken der Eingabetaste nach dem Befehl wird dieser sofort ausgeführt und seine Ausgabe auf dem Bildschirm angezeigt.
Die meisten Befehle in einer MongoDB-Datenbank werden auf einer oder mehreren ausgewählten Datenbanken ausgeführt. Die aktuell ausgewählte Datenbank wird durch das über die Shell zugängliche `db`-Objekt repräsentiert. Sie können die aktuell ausgewählte Datenbank überprüfen, indem Sie in der Shell `db` eingeben.
dbIn einer neu verbundenen Shell-Instanz heißt die ausgewählte Datenbank immer „test“:
Output
test
Sie können diese Datenbank bedenkenlos zum Testen von MongoDB und der MongoDB-Shell verwenden. Um zu einer anderen Datenbank zu wechseln, führen Sie den Befehl `use` gefolgt vom Namen der neuen Datenbank aus. Versuchen Sie beispielsweise, zur Datenbank „fruit“ zu wechseln.
use fruits
Die Shell wird Sie darüber informieren, dass Sie nun die neue Datenbank verwenden:
Output
switched to db fruitsSie können dies überprüfen, indem Sie erneut „db“ eingeben, um den aktuell ausgewählten Datenbanknamen zu ermitteln:
dbDiesmal spiegelt die Ausgabe die neue Datenbank wider:
Output
fruitsBeachten Sie, dass Sie die Datenbank „fruits“ nicht explizit erstellt haben. MongoDB erlaubt die Ausführung von Befehlen auf Datenbanken und Sammlungen, die noch nicht existieren. Diese Strukturen werden erst erstellt, wenn zum ersten Mal ein Objekt eingefügt wird. Selbst wenn Sie die aktuelle Datenbank erfolgreich in „fruits“ ändern, existiert diese Datenbank noch nicht.
Versuchen Sie, diese Datenbank zu erstellen, indem Sie ein Objekt einfügen. Das folgende Beispiel erklärt, wie Sie ein Objekt in eine Sammlung namens „Äpfel“ in der Datenbank einfügen. Durch das Hinzufügen dieses Objekts werden sowohl die Datenbank „Früchte“ als auch die Sammlung „Äpfel“ erstellt.
Geben Sie die folgende Zeile in die MongoDB-Shell ein und drücken Sie die Eingabetaste. Beachten Sie den hervorgehobenen Sammlungsnamen (Äpfel):
db.apples.insert()
Durch Drücken der Eingabetaste nach der öffnenden Klammer wird eine mehrzeilige Befehlszeile gestartet, in der Sie längere Befehle auf mehreren Zeilen eingeben können. Der Einfügebefehl wird erst vollständig ausgeführt, wenn Sie eine schließende Klammer eingeben. Bis dahin ändert sich die Eingabeaufforderung von einem Größer-als-Zeichen zu Auslassungspunkten (…).
Sie müssen MongoDB-Befehle nicht auf mehrere Zeilen aufteilen, aber dadurch werden lange Befehle leichter lesbar und verständlich.
In der nächsten Zeile schließen Sie das Objekt in eckige Klammern ({ und }) ein. Dieses Beispieldokument enthält nur ein Feld-Wert-Paar:
{name: 'Red Delicious'}
Wenn Sie erneut die Eingabetaste drücken, erscheint eine weitere Zeile, in der Sie zusätzliche Befehlsparameter hinzufügen können, beispielsweise weitere Dokumente oder beliebige Spezifikationen, die von der MongoDB-Einfügemethode zugelassen werden. In diesem Beispiel können Sie Ihre Eingabe jedoch abschließen und die Operation ausführen, indem Sie eine schließende Klammer eingeben und die Eingabetaste drücken.
Diesmal zeichnet die Mongo-Shell das Ende des Einfügebefehls auf und führt den gesamten Befehl aus.
Output
WriteResult({ "nInserted" : 1 })Nach dem Einfügen dieses neuen Objekts in die Datenbank existieren sowohl die Datenbank „Früchte“ als auch die Sammlung „Äpfel“. Die Liste der verfügbaren Datenbanken kann mit dem Befehl „show dbs“ überprüft werden.
show dbs
Es wird erneut eine Liste aller verfügbaren Datenbanken zurückgegeben, diesmal jedoch einschließlich der Obstdatenbank:
Output
admin 0.000GB
config 0.000GB
fruits 0.000GB
local 0.000GBDer Befehl „show collections“ ist nützlich, um eine Liste der Sammlungen in der aktuell ausgewählten Datenbank abzurufen:
show collections
Da die Obstdatenbank ausgewählt ist, wird nur die neu erstellte Apfelsammlung zurückgegeben:
Output
applesDamit haben Sie gelernt, wie man Befehle in der MongoDB-Shell ausführt. Außerdem haben Sie ein Instanzobjekt erstellt, wodurch wiederum eine neue Datenbank und eine neue Sammlung erzeugt wurden, die nun auf dem Server existieren.
Im letzten Schritt dieser Anleitung lernen Sie, wie Sie die Hilfsfunktionen der MongoDB-Shell nutzen können, um Befehle besser zu verstehen und sie einfacher auszuführen.
Schritt 3 – Interaktive Hilfe von der Shell abrufen
Die MongoDB-Shell verfügt über ein integriertes Hilfesystem, mit dem Sie Informationen zu den verfügbaren Befehlen des Datenbanksystems und den darin gespeicherten Objekten erhalten. Diese Einführungshilfeseite kann direkt an der Shell-Eingabeaufforderung mit dem Befehl `help` angezeigt werden.
help
Die MongoDB-Shell gibt eine Liste mit detaillierteren Hilfeeinträgen zurück, die weitere Informationen zu bestimmten Teilen der Shell sowie einige Beispiele der am häufigsten verwendeten Befehle enthalten:
Output
db.help() help on db methods
db.mycoll.help() help on collection methods
sh.help() sharding helpers
rs.help() replica set helpers
help admin administrative help
help connect connecting to a db help
help keys key shortcuts
help misc misc things to know
help mr mapreduce
show dbs show database names
show collections show collections in current database
show users show users in current database
show profile show most recent system.profile entries with time >= 1ms
show logs show the accessible logger names
show log [name] prints out the last segment of log in memory, 'global' is default
use <db_name> set current database
db.mycoll.find() list objects in collection mycoll
db.mycoll.find( { a : 1 } ) list objects in mycoll where a == 1
it result of the last line evaluated; use to further iterate
DBQuery.shellBatchSize = x set default number of items to display on shell
exit quit the mongo shellDie ersten beiden hervorgehobenen Einträge in der Ausgabe dieses Beispiels zeigen, wie der Hilfsbefehl für die aktuelle Datenbank bzw. eine Sammlung in der aktuellen Datenbank ausgeführt wird. Der angegebene Sammlungsname lautet „mycoll“, es kann jedoch jeder gültige Sammlungsname verwendet werden.
Die letzte hervorgehobene Zeile – `db.mycoll.find()` – ist ein Beispiel für eine Methode zum Abrufen eines Objekts aus einer Collection mithilfe des `find`-Befehls, der die Objekte in einer gegebenen Collection auflistet. Da Collections zu den am häufigsten verwendeten Strukturen in einer MongoDB-Datenbank gehören, werden wir in diesem Schritt die Verwendung der `find()`- und `help()`-Methoden auf Collection-Ebene von MongoDB untersuchen.
Rufen Sie zunächst die Manpage des Apples-Pakets auf, um die für dieses Paket verfügbaren Befehle zu finden:
db.apples.help()
Hinweis: Während der ursprüngliche Hilfebefehl einfach nur help lautete, müssen Sie beim Ausführen einer Hilfsmethode für Datenbank- und Sammlungsobjekte dem Befehl ein Paar Klammern hinzufügen, damit er als help() und nicht nur als help gelesen wird.
Die Ausgabe dieses Befehls ist eine lange Liste verfügbarer Befehle, die Sie auf die Apfelsammlung anwenden können:
Output
DBCollection help
db.apples.find().help() - show DBCursor help
db.apples.bulkWrite( operations, <optional params> ) - bulk execute write operations, optional parameters are: w, wtimeout, j
db.apples.count( query = {}, <optional params> ) - count the number of documents that matches the query, optional parameters are: limit, skip, hint, maxTimeMS
db.apples.countDocuments( query = {}, <optional params> ) - count the number of documents that matches the query, optional parameters are: limit, skip, hint, maxTimeMS
. . .
db.apples.find([query],[fields]) - query is an optional query filter. fields is optional set of fields to return.
e.g. db.apples.find( {x:77} , {name:1, x:1} )
db.apples.find(...).count()
db.apples.find(...).limit(n)
db.apples.find(...).skip(n)
db.apples.find(...).sort(...)
. . .Zusätzlich zu einer übersichtlichen Liste der verfügbaren Befehle, die Sie in der Sammlung db.apples ausführen können (jeweils gefolgt von einer kurzen Erklärung, was der Befehl bewirkt), bietet diese Manpage auch Beispiele für die Verwendung häufig verwendeter Befehle wie find().
Dieses integrierte Hilfesystem dient als praktisches Nachschlagewerk für verfügbare Befehle. Sie können es verwenden, um Ihre Syntax zu überprüfen, wenn Sie sich nicht an die genaue Schreibweise oder die zulässigen Bestandteile eines Befehls erinnern.
Da Sie bereits aus den Manpages gelernt haben, dass man mit find() Objekte aus einer Sammlung abrufen kann, können Sie jetzt das im vorherigen Schritt in der Sammlung apples erstellte Objekt abrufen.
Dieses Beispiel verdeutlicht jedoch eine weitere interaktive MongoDB-Funktion, die sogenannte Befehlsvervollständigung. Die MongoDB-Shell folgt dem Muster anderer gängiger Shells wie Bash oder zsh, bei denen das Drücken der Tabulatortaste den gerade eingegebenen Befehl automatisch vervollständigt.
Geben Sie zunächst Folgendes ein, drücken Sie aber noch nicht die Eingabetaste:
db.a
Anstatt den vollständigen Sammlungsnamen einzugeben, drücken Sie die Tabulatortaste auf Ihrer Tastatur. Die MongoDB-Shell antwortet mit einer Liste aller verfügbaren Möglichkeiten, beginnend mit den folgenden:
Output
> db.a
db.adminCommand( db.aggregate( db.apples db.auth(Diese Ausgabe listet drei Befehle auf, die durch öffnende Klammern gekennzeichnet sind, sowie die gesetzten Äpfel.
Geben Sie einen weiteren Buchstaben in die Shell ein:
db.ap
Drücken Sie erneut die Tabulatortaste. Diesmal gibt es keine andere Möglichkeit, mit „ap“ zu beginnen, und die MongoDB-Shell vervollständigt die Eingabe automatisch und gibt „db.apples“ ein. Gehen Sie nach demselben Prinzip vor und vervollständigen Sie den Befehl „find()“ mithilfe der Tabulatorvervollständigung. Geben Sie „fi“ ein, drücken Sie aber nicht die Eingabetaste.
db.apples.fi
Durch Drücken der Tabulatortaste wird der Befehlsname automatisch zu db.apples.find vervollständigt. Durch erneutes Drücken der Tabulatortaste werden weitere Möglichkeiten angezeigt. Sie können aber auch manuell eine schließende Klammer hinzufügen, um den Befehl find auszuführen:
db.apples.find()
Die Shell zeigt eine Liste aller Objekte in der Apple-Sammlung an. Es wird nur ein Objekt geben, nämlich das, das Sie zuvor importiert haben:
Output
{ "_id" : ObjectId("60f31447f5643f739b0276e9"), "name" : "Red Delicious" }Ergebnis
Dieser Artikel führt Sie in die MongoDB-Shell ein. Mit der Shell können Sie neue Objekte in die Datenbank einfügen, bestehende Sammlungen abfragen und administrative Aufgaben zur Verwaltung der Datenbank, ihrer Daten und ihrer Benutzer durchführen.









