MongoDB
MongoDB ist eine NoSQL-Datenbank, die für ihre Flexibilität und Skalierbarkeit bekannt ist. Sie speichert Daten in JSON-ähnlichen Dokumenten, was es einfach macht, komplexe Datenstrukturen zu handhaben. Diese Strukturierung ermöglicht es, hierarchische Beziehungen, Arrays und andere komplexe Datentypen ohne die Einschränkungen eines starren, tabellenbasierten Schemas darzustellen. Dadurch können Änderungen am Datenmodell schneller und effizienter umgesetzt werden.
Hauptmerkmale von MongoDB
Flexibilität: MongoDB verwendet ein dokumentenorientiertes Modell, bei dem die Daten in Dokumenten gespeichert werden, die ähnliche Strukturen wie JSON haben, technisch aber im BSON-Format (Binary JSON) gespeichert werden. Dies ermöglicht eine hohe Flexibilität bei der Strukturierung der Daten, da jedes Dokument unterschiedliche Felder und Datentypen enthalten kann.
Skalierbarkeit: MongoDB ist darauf ausgelegt, horizontal zu skalieren, was bedeutet, dass die Datenbank einfach auf mehrere Server verteilt werden kann. Dies wird durch Sharding erreicht, eine Methode zur Verteilung von Daten über mehrere Maschinen, um sowohl die Speicherkapazität als auch die Verarbeitungsgeschwindigkeit zu erhöhen. MongoDB unterstützt auch Replikation, wodurch Daten über mehrere Server repliziert werden, um Ausfallsicherheit und hohe Verfügbarkeit sicherzustellen.
Leistungsfähigkeit: Durch den Verzicht auf JOIN-Operationen und die Möglichkeit, Daten in einem einzigen Dokument zu speichern, kann MongoDB oft schnellere Schreib- und Leseoperationen durchführen als relationale Datenbanken. Zudem ermöglicht die Indexierung auf Felder innerhalb von Dokumenten eine effiziente Suche und Abfrage der Daten.
Entwicklerfreundlich: MongoDB bietet Treiber für eine Vielzahl von Programmiersprachen, darunter Python, JavaScript, Java, C#, und viele mehr.
MongoDB Shell
Für die Arbeit mit der Datenbank nutzen wir die MongoDB Shell (mongosh
). Diese bietet eine schnelle und intuitive Möglichkeit, sich mit MongoDB zu verbinden und zu arbeiten. Mit mongosh
können wir Daten abfragen, Einstellungen konfigurieren und verschiedene Aktionen durchführen.
Die Hauptfunktionen von mongosh umfassen:
- Syntaxhervorhebung: Der Shell unterstützt Syntaxhervorhebung, die den Code lesbarer macht und die Erkennung von Fehlern erleichtert.
- Intelligente Autovervollständigung: Diese Funktion hilft bei der Eingabe von Befehlen und Parametern, indem sie Vorschläge macht und somit die Produktivität erhöht.
- Kontextbezogene Hilfe:
mongosh
bietet direkte Hilfe zu Befehlen und Optionen, was besonders nützlich für Einsteiger ist. - Fehlermeldungen: Klare und präzise Fehlermeldungen helfen dabei, Probleme schnell zu identifizieren und zu beheben.
Um mit MongoDB zu beginnen, müssen wir zunächst den MongoDB-Dienst starten und dann die MongoDB Shell öffnen. Sobald die Shell geöffnet ist, können wir grundlegende Befehle ausführen, um Datenbanken und Sammlungen zu erstellen, Daten einzufügen und Abfragen auszuführen.
Installation
In diesem Abschnitt wird die Installation der NoSQL-Datenbank MongoDB und der MongoDB Shell (mongosh
) behandelt.
Windows
- MongoDB herunterladen:
Besuchen Sie die offizielle MongoDB-Download-Seite und laden Sie die aktuelle (“current”) MongoDB Community Server-Version für Windows herunter.- Version: … (current).
- Platform: Windows x64
- Package: msi
- Installation:
- Führen Sie das Installationsprogramm aus und folgen Sie den Anweisungen.
- Wählen Sie “Complete” als Setup-Typ.
- Aktivieren Sie die Option “Install MongoDB as a Service”.
- MongoDB Shell (
mongosh
) herunterladen:
Besuchen Sie die MongoDB Shell Download-Seite und laden Sie die aktuelle Version von MongoDB Shell herunter (wählen Sie als Plattform Windows und als Package msi).
Um MongoDB von jeder Eingabeaufforderung aus zugänglich zu machen, setzen wir nun eine Umgebungsvariable. Dadurch können Sie mongod
und mongo
von jeder Eingabeaufforderung aus ohne Angabe des vollständigen Pfades ausführen.
Hier ist eine detaillierte Anleitung, wie Sie die Umgebungsvariable unter Windows setzen können:
- Pfad zu
mongod.exe
undmongosh.exe
ermitteln:- Der Pfad ist in der Regel
C:\Program Files\MongoDB\Server\<Version>\bin
. Finden Sie den Pfad im Datei-Explorer und notieren Sie ihn.
- Der Pfad ist in der Regel
- Umgebungsvariablen öffnen:
- Drücken Sie die Windows-Taste und geben Sie “Umgebungsvariablen” ein.
- Wählen Sie “Umgebungsvariablen für dieses Konto bearbeiten” oder “Systemumgebungsvariablen bearbeiten” aus.
- Systemumgebungsvariablen bearbeiten:
- Im Fenster “Systemeigenschaften” klicken Sie auf die Schaltfläche “Umgebungsvariablen”.
- Pfad-Variable bearbeiten:
- Im Abschnitt “Systemvariablen” suchen Sie die Variable “Path” und wählen Sie sie aus. Klicken Sie dann auf “Bearbeiten”.
- Neuen Pfad hinzufügen:
- Klicken Sie auf “Neu” und fügen Sie den Pfad zu
mongod.exe
hinzu (z.B.C:\Program Files\MongoDB\Server\<Version>\bin
).
- Klicken Sie auf “Neu” und fügen Sie den Pfad zu
- Änderungen speichern:
- Klicken Sie auf “OK”, um alle Fenster zu schließen und die Änderungen zu speichern.
Um sicherzustellen, dass die Umgebungsvariablen korrekt gesetzt wurden, öffnen Sie eine neue Eingabeaufforderung und führen Sie die folgenden Befehle aus:
mongod --version
mongosh --version
Wenn beide Befehle die Versionsnummern von MongoDB und MongoDB Shell (mongosh) zurückgeben, wurde die Umgebungsvariable erfolgreich gesetzt
macOS
Folgen Sie der Installationsanweisung der MongoDB-Dokumentation:
Xcode Command-Line Tools installieren (falls noch nicht installiert): Homebrew benötigt die Xcode Command-Line Tools von Apples Xcode.
- Prüfen Sie im Terminal, ob XCode installiert ist (wenn Xcode installiert ist, wird die Version angezeigt. Wenn nicht, wird eine entsprechende Fehlermeldung angezeigt und Sie müssen XCode installieren):
xcode-select --version
- Falls notwendig, installieren Sie die Xcode Command-Line Tools mit folgendem Befehl im macOS Terminal:
xcode-select --install
Homebrew installieren (falls noch nicht installiert):
- Führen Sie diesen Befehl im Terminal aus, um den Homebrew-Paketmanager zu installieren:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
MongoDB installieren:
- Laden Sie das offizielle Homebrew-Formular für MongoDB und die Datenbank-Tools herunter, indem Sie folgenden Befehl im macOS Terminal ausführen:
brew tap mongodb/brew
- Aktualisieren Sie Homebrew und alle vorhandenen Formeln:
brew update
- Um MongoDB zu installieren, führen Sie folgenden Befehl im macOS Terminal aus:
brew install mongodb-community@7.0
Öffnen Sie -nachdem alles installiert wurde- eine neue Eingabeaufforderung und führen Sie die folgenden Befehle aus:
Prüfung mongod-Server:
mongod --version
Die MongoDB Shell: mongosh
mongosh --version
Wenn bei beiden Befehlen eine Version angezeigt wird, war die Installation erfolgreich.
Starten und stoppen
Durch das Starten und Stoppen des MongoDB-Dienstes können Sie sicherstellen, dass die Datenbank ordnungsgemäß läuft oder heruntergefahren wird, je nach Ihren Anforderungen.
Windows
MongoDB starten
MongoDB sollte als Dienst automatisch gestartet werden, wenn Sie die Option “Install MongoDB as a Service” während der Installation aktiviert haben. Sie müssen daher zunächst keine weiteren Schritte unternehmen und können zum nächsten Kaptitel übergehen.
Führen Sie die folgenden Schritte nur dann aus, falls MongoDB nicht automatisch gestartet wurde oder falls Sie den Dienst neu starten möchten:
- Öffnen Sie die Dienstverwaltung:
- Drücken Sie die
Windows-Taste
+R
, um das Ausführen-Dialogfeld zu öffnen. - Geben Sie
services.msc
ein und drücken SieEnter
.
- Drücken Sie die
- Finden Sie den MongoDB-Dienst:
- Im Fenster “Dienste” scrollen Sie nach unten, bis Sie den Dienst namens
MongoDB
finden.
- Im Fenster “Dienste” scrollen Sie nach unten, bis Sie den Dienst namens
- Starten Sie den Dienst:
- Klicken Sie mit der rechten Maustaste auf den
MongoDB
-Dienst und wählen SieStarten
aus dem Kontextmenü.
- Klicken Sie mit der rechten Maustaste auf den
Alternativ können Sie den MongoDB-Dienst auch über die Eingabeaufforderung starten:
Öffnen Sie die Eingabeaufforderung als Administrator:
- Drücken Sie die
Windows-Taste
, geben Siecmd
ein, klicken Sie mit der rechten Maustaste aufEingabeaufforderung
und wählen SieAls Administrator ausführen
.
- Drücken Sie die
Führen Sie den folgenden Befehl aus, um den MongoDB-Dienst zu starten:
net start MongoDB
MongoDB stoppen
Um MongoDB zu stoppen, können Sie entweder die Dienstverwaltung verwenden oder einen Befehl in der Eingabeaufforderung ausführen.
So stoppen Sie den MongoDB-Dienst manuell:
- Öffnen Sie die Dienstverwaltung:
- Drücken Sie die
Windows-Taste
+R
, um das Ausführen-Dialogfeld zu öffnen. - Geben Sie
services.msc
ein und drücken SieEnter
.
- Drücken Sie die
- Finden Sie den MongoDB-Dienst:
- Im Fenster “Dienste” scrollen Sie nach unten, bis Sie den Dienst namens
MongoDB
finden.
- Im Fenster “Dienste” scrollen Sie nach unten, bis Sie den Dienst namens
- Stoppen Sie den Dienst:
- Klicken Sie mit der rechten Maustaste auf den
MongoDB
-Dienst und wählen SieBeenden
aus dem Kontextmenü.
- Klicken Sie mit der rechten Maustaste auf den
Alternativ können Sie den MongoDB-Dienst auch über die Eingabeaufforderung stoppen:
Öffnen Sie die Eingabeaufforderung als Administrator:
- Drücken Sie die
Windows-Taste
, geben Siecmd
ein, klicken Sie mit der rechten Maustaste aufEingabeaufforderung
und wählen SieAls Administrator ausführen
.
- Drücken Sie die
Führen Sie den folgenden Befehl aus, um den MongoDB-Dienst zu stoppen:
net stop MongoDB
macOS
MongoDB starten
Nach der Installation von MongoDB können Sie den Datenbankdienst einfach mit Homebrew starten. Homebrew verwaltet Dienste wie MongoDB und ermöglicht es Ihnen, diese mit einfachen Befehlen zu starten und zu stoppen.
So starten Sie den MongoDB-Dienst:
- Öffnen Sie das Terminal:
- Sie finden das Terminal im Ordner “Dienstprogramme” innerhalb des Ordners “Programme” oder indem Sie
cmd + Leertaste
drücken und “Terminal” eingeben.
- Sie finden das Terminal im Ordner “Dienstprogramme” innerhalb des Ordners “Programme” oder indem Sie
- Starten Sie den MongoDB-Dienst:
- Geben Sie den folgenden Befehl im Terminal ein und drücken Sie
Enter
:
brew services start mongodb-community@7.0
- Wenn alles korrekt eingerichtet ist, sehen Sie eine Bestätigungsmeldung, dass der Dienst gestartet wurde.
- Geben Sie den folgenden Befehl im Terminal ein und drücken Sie
Um sicherzustellen, dass MongoDB korrekt gestartet wurde und läuft, können Sie eine Liste aller von Homebrew verwalteten Dienste anzeigen.
So überprüfen Sie den Status von MongoDB:
Geben Sie den folgenden Befehl im Terminal ein und drücken Sie
Enter
:brew services list
- Dieser Befehl zeigt eine Liste aller Dienste an, die von Homebrew verwaltet werden, sowie deren aktuellen Status.
Überprüfen Sie den Eintrag für
mongodb-community
:- In der Liste sollten Sie
mongodb-community
sehen, gefolgt von der Versionsnummer und dem Statusstarted
. Dies zeigt an, dass MongoDB erfolgreich läuft.
- In der Liste sollten Sie
MongoDB stoppen
Wenn Sie MongoDB beenden möchten, können Sie dies ebenfalls mit einem einfachen Homebrew-Befehl tun.
So stoppen Sie den MongoDB-Dienst:
Geben Sie den folgenden Befehl im Terminal ein und drücken Sie Enter
:
brew services stop mongodb-community@7.0
Es sollte eine Bestätigungsmeldung erscheinen, dass der Dienst gestoppt wurde.
Basics
In diesem Abschnitt lernen Sie die grundlegende Nutzung von MongoDB, einschließlich der Verbindung zur Datenbank, grundlegender Befehle und Datenbankmanipulation.
Die MongoDB Shell (mongosh) ist das primäre Interface zur Interaktion mit Ihrer MongoDB-Datenbank. Sie ermöglicht es Ihnen, Befehle direkt einzugeben und auszuführen.
Verbindung zur MongoDB-Instanz
Um die MongoDB Shell zu starten und sich mit Ihrer laufenden MongoDB-Instanz zu verbinden, öffnen Sie ein Terminal und geben Sie den folgenden Befehl ein:
mongosh
Wenn die Verbindung erfolgreich ist, sehen Sie die mongosh-Eingabeaufforderung:
test>
Falls Sie eine Fehlermeldung erhalten, stellen Sie sicher, dass MongoDB auf Ihrem System läuft.
Datenbanken anzeigen
Um alle verfügbaren Datenbanken aufzulisten, verwenden Sie den folgenden Befehl:
show dbs
Dieser Befehl zeigt eine Liste aller Datenbanken, die auf der MongoDB-Instanz gespeichert sind.
Datenbank auswählen oder erstellen
Um eine spezifische Datenbank auszuwählen oder zu erstellen, verwenden Sie den use
-Befehl:
use mydatabase
Dieser Befehl wechselt zur Datenbank mydatabase
. Wenn die Datenbank noch nicht existiert, wird sie erstellt.
Sammlung (Collection) erstellen
Um eine neue Sammlung innerhalb der aktuellen Datenbank zu erstellen, verwenden Sie den createCollection
-Befehl:
db.createCollection("mycollection")
Dieser Befehl erstellt eine neue Sammlung namens mycollection
.
Dokument einfügen
Um ein Dokument in eine Sammlung einzufügen, verwenden Sie den insertOne
-Befehl:
db.mycollection.insertOne({name: "Jan", age: 44})
Dieser Befehl fügt ein neues Dokument in die Sammlung mycollection
ein.
Dokumente abfragen
Um alle Dokumente in einer Sammlung abzufragen, verwenden Sie den find
-Befehl:
db.mycollection.find()
Dieser Befehl gibt alle Dokumente in der Sammlung mycollection
zurück.
Weitere Befehle
Ein spezifisches Dokument abfragen:
db.mycollection.findOne({name: "Jan"})
Dieser Befehl gibt das erste Dokument zurück, das den angegebenen Kriterien entspricht.
Dokumente aktualisieren:
db.mycollection.updateOne({name: "Jan"}, {$set: {age: 45}})
Dieser Befehl aktualisiert das Alter von
Jan
auf 45.Dokumente löschen:
db.mycollection.deleteOne({name: "Jan"})
Dieser Befehl löscht das erste Dokument, das den angegebenen Kriterien entspricht.
Python-Integration
Umgebung erstellen
Um eine Umgebung einzurichten, befolgen Sie diese Anweisungen basierend auf Ihrem Betriebssystem:
- Zugriff auf die Eingabeaufforderung oder das Terminal:
- Windows-Benutzer: Öffnen Sie die Anaconda-Eingabeaufforderung über das Startmenü.
- macOS-Benutzer: Öffnen Sie das Terminal unter Programme > Dienstprogramme oder durch die Suche nach “Terminal”.
- Erstellen der Umgebung:
- Verwenden Sie den folgenden Befehl, um eine neue Conda-Umgebung namens
mongodb
mit Python 3.11 und pip zu erstellen:
conda create --name mongodb python=3.11 pip
- Verwenden Sie den folgenden Befehl, um eine neue Conda-Umgebung namens
- Aktivieren der Umgebung:
- Sobald die Umgebung erstellt ist, aktivieren Sie sie mit:
conda activate mongodb
- Die Eingabeaufforderung ändert sich, um anzuzeigen, dass die Umgebung
mongodb
aktiv ist.
- Installieren der benötigten Bibliotheken:
- Mit aktivierter Umgebung installieren Sie die Bibliotheken:
pip install pymongo gridfs pillow jupyter ipykernel pandas
Erklärung der Bibliotheken- pymongo: Bietet eine Python-Schnittstelle zu MongoDB, einer NoSQL-Datenbank.
- pillow: Eine Bibliothek für die Bildverarbeitung in Python, die das Öffnen, Bearbeiten und Speichern von Bilddateien unterstützt.
- jupyter: Eine interaktive Entwicklungsumgebung zur Erstellung und Ausführung von Jupyter-Notebooks.
- ipykernel: Eine Implementierung des Jupyter-Kernels für Python, die die Ausführung von Python-Code in Jupyter-Notebooks ermöglicht.
- pandas: Eine leistungsfähige Datenanalysebibliothek für Python, die Datenmanipulation und -analyse vereinfacht.
- Dieser Befehl ruft alle Pakete von PyPI ab und installiert sie.
Verbindung herstellen
Um mit MongoDB zu arbeiten, müssen Sie in einem Jupyter Notebook eine Verbindung zur Datenbank herstellen. Dies erfolgt in mehreren Schritten, die unten beschrieben sind:
Schritt 1: Importieren der pymongo-Bibliothek
Zuerst müssen Sie die pymongo
-Bibliothek importieren, die eine Schnittstelle zwischen Python und MongoDB bietet.
import pymongo
Schritt 2: Erstellen eines MongoDB-Clients
Erstellen Sie eine Verbindung zum MongoDB-Server. Der Standardanschluss für MongoDB ist 27017
.
# Verbindung zur MongoDB herstellen
= pymongo.MongoClient("mongodb://localhost:27017/") client
Hier verwenden wir localhost
, da der MongoDB-Server auf dem lokalen Rechner läuft. Wenn der Server auf einem Remote-Server läuft, ersetzen Sie localhost
durch die IP-Adresse oder den Domain-Namen des Servers.
Schritt 3: Auswählen der Datenbank
MongoDB organisiert Daten in Datenbanken. Um eine bestimmte Datenbank zu verwenden, greifen Sie auf diese wie folgt zu:
# Datenbank auswählen
= client["mydatabase"] db
Falls die Datenbank noch nicht existiert, wird sie erstellt, sobald Sie ein Dokument einfügen.
Schritt 4: Auswählen der Sammlung
Innerhalb einer Datenbank organisiert MongoDB Daten in Sammlungen (ähnlich wie Tabellen in SQL-Datenbanken). Sie können eine Sammlung wie folgt auswählen:
# Sammlung auswählen
= db["mycollection"] collection
Auch hier gilt: Falls die Sammlung noch nicht existiert, wird sie erstellt, sobald Sie ein Dokument einfügen.
Schritt 5: Einfügen eines Dokuments
Ein Dokument in MongoDB ist ein JSON-ähnliches Objekt. Sie können ein Dokument wie folgt einfügen:
# Dokument einfügen
"name": "Alice", "age": 25}) collection.insert_one({
Der Befehl insert_one
fügt ein einzelnes Dokument in die Sammlung ein.
Schritt 6: Abfragen von Dokumenten
Um Dokumente aus einer Sammlung abzufragen, können Sie die Methode find
verwenden. Diese gibt alle Dokumente in der Sammlung zurück:
# Dokumente abfragen
for doc in collection.find():
print(doc)
Dieser Code durchläuft alle Dokumente in der Sammlung und druckt sie aus.
Hier der Output der Abfrage:
{'_id': ObjectId('666d5f5b50a5f96c3ed89649'), 'name': 'Jan', 'age': 44}
{'_id': ObjectId('666d7727c1365bab40959889'), 'name': 'Alice', 'age': 25}
Weitere Funktionen
pymongo
bietet viele weitere Funktionen, wie das Aktualisieren und Löschen von Dokumenten sowie das Erstellen von Indizes. Hier sind einige Beispiele:
Dokument aktualisieren
# Dokument aktualisieren
"name": "Alice"}, {"$set": {"age": 26}}) collection.update_one({
Dokument löschen
# Dokument löschen
"name": "Alice"}) collection.delete_one({
Indizes erstellen
# Index erstellen
"name", pymongo.ASCENDING)]) collection.create_index([(
Diese zusätzlichen Funktionen ermöglichen eine umfassendere Interaktion mit Ihrer MongoDB-Datenbank.
Bilder
Das Speichern und Abrufen von Bildern in MongoDB kann auf verschiedene Weisen erfolgen. Eine gängige Methode ist die Verwendung von GridFS, einem Spezialsystem von MongoDB zum Speichern und Abrufen von großen Dateien, einschließlich Bildern.
Im nächsten Abschnitt werden wir uns auf die Verwendung von GridFS konzentrieren, um Bilder in einer MongoDB-Datenbank zu speichern und abzurufen.
Setup
Wir beginnen mit dem Importieren der notwendigen Bibliotheken. Zusätzlich zu pymongo
benötigen wir gridfs
und Pillow
, eine Bibliothek zur Bildbearbeitung in Python.
gridfs
ist ein Modul zur Speicherung großer Dateien in MongoDB, indem sie in kleinere Chunks aufgeteilt werden.
import pymongo
import gridfs
from PIL import Image
import io
Stellen Sie eine Verbindung zur MongoDB-Datenbank her.
# Verbindung zur MongoDB herstellen
= pymongo.MongoClient("mongodb://localhost:27017/")
client = client["mydatabase"] db
Erstellen Sie eine GridFS-Instanz für die Datenbank.
# GridFS-Instanz erstellen
= gridfs.GridFS(db) fs
Bild laden
Laden Sie ein Bild mit Pillow
, konvertieren Sie es in ein Byte-Format und speichern Sie es mit GridFS in MongoDB.
# Bild laden
= "mongodb.png"
image_path = Image.open(image_path)
image
# Bild in Bytes konvertieren
= io.BytesIO()
image_bytes format='PNG')
image.save(image_bytes, = image_bytes.getvalue()
image_bytes
# Bild in MongoDB speichern
= fs.put(image_bytes, filename="my_image.png")
file_id print(f"Bild gespeichert mit File-ID: {file_id}")
Bild abrufen
Um ein Bild aus MongoDB abzurufen und anzuzeigen, verwenden Sie den find
-Befehl von GridFS.
# Bild aus MongoDB abrufen
= fs.get(file_id)
output_image
# Bild in Bytes konvertieren
= output_image.read()
output_image_bytes
# Bild anzeigen
= Image.open(io.BytesIO(output_image_bytes))
output_image output_image.show()
Fehlerbehandlung
Wie bei jeder Datenbankoperation ist es wichtig, Fehler zu behandeln. Hier ist ein Beispiel, wie Sie Fehler abfangen können:
try:
= pymongo.MongoClient("mongodb://localhost:27017/")
client print("Verbindung erfolgreich")
except pymongo.errors.ConnectionError as e:
print("Verbindung fehlgeschlagen:", e)
try:
= fs.put(image_bytes, filename="my_image.png")
file_id print(f"Bild gespeichert mit File-ID: {file_id}")
except Exception as e:
print("Fehler beim Speichern des Bildes:", e)