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

  1. 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
  2. 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”.
  3. 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:

  1. Pfad zu mongod.exe und mongosh.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.
  2. 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.
  3. Systemumgebungsvariablen bearbeiten:
    • Im Fenster “Systemeigenschaften” klicken Sie auf die Schaltfläche “Umgebungsvariablen”.
  4. Pfad-Variable bearbeiten:
    • Im Abschnitt “Systemvariablen” suchen Sie die Variable “Path” und wählen Sie sie aus. Klicken Sie dann auf “Bearbeiten”.
  5. 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).
  6. Ä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:

  1. 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
  2. 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)"
  3. 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:

  1. Ö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 Sie Enter.
  2. Finden Sie den MongoDB-Dienst:
    • Im Fenster “Dienste” scrollen Sie nach unten, bis Sie den Dienst namens MongoDB finden.
  3. Starten Sie den Dienst:
    • Klicken Sie mit der rechten Maustaste auf den MongoDB-Dienst und wählen Sie Starten aus dem Kontextmenü.

Alternativ können Sie den MongoDB-Dienst auch über die Eingabeaufforderung starten:

  1. Öffnen Sie die Eingabeaufforderung als Administrator:

    • Drücken Sie die Windows-Taste, geben Sie cmd ein, klicken Sie mit der rechten Maustaste auf Eingabeaufforderung und wählen Sie Als Administrator ausführen.
  2. 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:

  1. Ö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 Sie Enter.
  2. Finden Sie den MongoDB-Dienst:
    • Im Fenster “Dienste” scrollen Sie nach unten, bis Sie den Dienst namens MongoDB finden.
  3. Stoppen Sie den Dienst:
    • Klicken Sie mit der rechten Maustaste auf den MongoDB-Dienst und wählen Sie Beenden aus dem Kontextmenü.

Alternativ können Sie den MongoDB-Dienst auch über die Eingabeaufforderung stoppen:

  1. Öffnen Sie die Eingabeaufforderung als Administrator:

    • Drücken Sie die Windows-Taste, geben Sie cmd ein, klicken Sie mit der rechten Maustaste auf Eingabeaufforderung und wählen Sie Als Administrator ausführen.
  2. 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:

  1. Ö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.
  2. 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.

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:

  1. 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.
  2. Überprüfen Sie den Eintrag für mongodb-community:

    • In der Liste sollten Sie mongodb-community sehen, gefolgt von der Versionsnummer und dem Status started. Dies zeigt an, dass MongoDB erfolgreich läuft.

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:

  1. 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”.
  2. 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
  3. 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.
  4. Installieren der benötigten Bibliotheken:
    • Mit aktivierter Umgebung installieren Sie die Bibliotheken:
    pip install pymongo gridfs pillow jupyter ipykernel pandas
    • 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
client = pymongo.MongoClient("mongodb://localhost:27017/")

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
db = client["mydatabase"]

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
collection = db["mycollection"]

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
collection.insert_one({"name": "Alice", "age": 25})

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
collection.update_one({"name": "Alice"}, {"$set": {"age": 26}})

Dokument löschen

# Dokument löschen
collection.delete_one({"name": "Alice"})

Indizes erstellen

# Index erstellen
collection.create_index([("name", pymongo.ASCENDING)])

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.

  • gridfsist 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
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]

Erstellen Sie eine GridFS-Instanz für die Datenbank.

# GridFS-Instanz erstellen
fs = gridfs.GridFS(db)

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
image_path = "mongodb.png"
image = Image.open(image_path)

# Bild in Bytes konvertieren
image_bytes = io.BytesIO()
image.save(image_bytes, format='PNG')
image_bytes = image_bytes.getvalue()

# Bild in MongoDB speichern
file_id = fs.put(image_bytes, filename="my_image.png")
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
output_image = fs.get(file_id)

# Bild in Bytes konvertieren
output_image_bytes = output_image.read()

# Bild anzeigen
output_image = Image.open(io.BytesIO(output_image_bytes))
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:
    client = pymongo.MongoClient("mongodb://localhost:27017/")
    print("Verbindung erfolgreich")
except pymongo.errors.ConnectionError as e:
    print("Verbindung fehlgeschlagen:", e)

try:
    file_id = fs.put(image_bytes, filename="my_image.png")
    print(f"Bild gespeichert mit File-ID: {file_id}")
except Exception as e:
    print("Fehler beim Speichern des Bildes:", e)