mongosh — Die MongoDB-Shell
Praxis-Guide zu mongosh — die moderne, JavaScript-basierte MongoDB-Shell zum Verbinden, Abfragen, Aggregieren und Verwalten von Collections und Dokumenten.
mongosh ist die moderne, JavaScript-basierte Shell für MongoDB und löst die alte mongo-Shell ab. Du tippst echtes JavaScript ein, sodass sich Abfragen, Aggregationen und ganze Verwaltungsskripte direkt in der Konsole zusammenbauen lassen – mit Autovervollständigung, Syntax-Highlighting und besserer Fehlerausgabe als beim Vorgänger. Dieser Guide führt dich durch die wichtigsten Befehle für den Alltag: vom Verbindungsaufbau über CRUD und Aggregation bis zu Indizes und Administration.
Verbindung herstellen
mongosh — Verbindet sich mit der lokalen MongoDB (localhost:27017).
mongoshmongosh '<connection-string>' — Verbindet sich über eine Connection-URI.
mongosh 'mongodb://user:pass@host:27017/mydb'mongosh --host <host> --port <port> — Verbindet sich mit einem bestimmten Host und Port.
mongosh --host db.example.com --port 27017mongosh -u <user> -p <password> --authenticationDatabase <db> — Verbindet sich mit Authentifizierung.
mongosh -u admin -p secret --authenticationDatabase adminmongosh --eval '<code>' — Führt JavaScript aus und beendet sich danach.
mongosh --eval 'db.users.countDocuments()'Datenbank & Collection
show dbs — Listet alle Datenbanken auf.
show dbsuse <database> — Wechselt zu einer Datenbank (wird beim ersten Schreibvorgang angelegt).
use myappshow collections — Listet alle Collections der aktuellen Datenbank auf.
show collectionsdb.createCollection('<name>') — Legt eine neue Collection explizit an.
db.createCollection('logs')db.<collection>.drop() — Löscht eine Collection.
db.temp_data.drop()db.dropDatabase() — Löscht die aktuelle Datenbank.
db.dropDatabase()CRUD-Operationen
db.<col>.insertOne({<doc>}) — Fügt ein einzelnes Dokument ein.
db.users.insertOne({name: 'John', email: 'john@example.com'})db.<col>.insertMany([{<doc>}, {<doc>}]) — Fügt mehrere Dokumente ein.
db.users.insertMany([{name: 'John'}, {name: 'Jane'}])db.<col>.find({<filter>}) — Findet Dokumente, die einem Filter entsprechen.
db.users.find({age: {$gte: 18}})db.<col>.findOne({<filter>}) — Findet das erste passende Dokument.
db.users.findOne({email: 'john@example.com'})db.<col>.updateOne({<filter>}, {$set: {<fields>}}) — Aktualisiert ein einzelnes Dokument.
db.users.updateOne({name: 'John'}, {$set: {age: 30}})db.<col>.updateMany({<filter>}, {$set: {<fields>}}) — Aktualisiert mehrere Dokumente.
db.users.updateMany({active: false}, {$set: {archived: true}})db.<col>.deleteOne({<filter>}) — Löscht ein einzelnes Dokument.
db.users.deleteOne({name: 'John'})db.<col>.deleteMany({<filter>}) — Löscht mehrere Dokumente.
db.users.deleteMany({archived: true})Abfrage & Aggregation
db.<col>.find().sort({<field>: 1}) — Sortiert die Ergebnisse (1=aufsteigend, -1=absteigend).
db.users.find().sort({name: 1})db.<col>.find().limit(<n>) — Begrenzt die Anzahl der Ergebnisse.
db.users.find().limit(10)db.<col>.find({}, {<field>: 1}) — Projektion: gibt nur bestimmte Felder zurück.
db.users.find({}, {name: 1, email: 1, _id: 0})db.<col>.countDocuments({<filter>}) — Zählt die Dokumente, die einem Filter entsprechen.
db.users.countDocuments({active: true})db.<col>.distinct('<field>') — Ermittelt die eindeutigen Werte eines Feldes.
db.users.distinct('country')db.<col>.aggregate([{$group: {_id: '$<field>', count: {$sum: 1}}}]) — Gruppiert und aggregiert Dokumente.
db.orders.aggregate([{$group: {_id: '$status', count: {$sum: 1}}}])Indizes
db.<col>.createIndex({<field>: 1}) — Legt einen aufsteigenden Index auf einem Feld an.
db.users.createIndex({email: 1}, {unique: true})db.<col>.getIndexes() — Listet alle Indizes einer Collection auf.
db.users.getIndexes()db.<col>.dropIndex('<name>') — Löscht einen Index anhand seines Namens.
db.users.dropIndex('email_1')db.<col>.find({<filter>}).explain('executionStats') — Zeigt den Ausführungsplan einer Abfrage an.
db.users.find({email: 'john@example.com'}).explain('executionStats')Administration
db.stats() — Zeigt Statistiken zur Datenbank an.
db.stats()db.<col>.stats() — Zeigt Statistiken zu einer Collection an.
db.users.stats()db.currentOp() — Zeigt die aktuell laufenden Operationen an.
db.currentOp()db.serverStatus() — Zeigt den detaillierten Serverstatus an.
db.serverStatus().connectionsrs.status() — Zeigt den Status des Replica-Sets an.
rs.status()db.version() — Zeigt die Version des MongoDB-Servers an.
db.version() Fazit
mongosh macht den täglichen Umgang mit MongoDB angenehm: Weil die Shell echtes JavaScript versteht, gehen Einzelabfragen genauso leicht von der Hand wie kleine Skripte, die du mit --eval direkt aus dem Terminal startest. Ein paar Befehle sind allerdings unwiderruflich – db.dropDatabase(), db.<col>.drop() und ein deleteMany({}) ohne Filter löschen ohne Rückfrage und ohne Papierkorb; prüfe deshalb erst mit use und countDocuments, wo du gerade stehst. Connection-Strings mit Klartext-Passwörtern landen sonst schnell in der Shell-History oder in einem Git-Repo – nutze stattdessen Umgebungsvariablen oder die interaktive Passwortabfrage. Und --eval führt aus, was du ihm gibst: Setze es bei Lösch- und Update-Befehlen mit Bedacht ein.
Weiterführende Links
- mongosh-Dokumentation – offizielle Referenz zu Installation, Konfiguration und Befehlen (englisch)
- MongoDB Manual – vollständige Dokumentation zu Abfragen, Aggregation und Administration (englisch)