Skip to content

Aufgabe 10 - MongoDB

Switch to Zen Mode

MongoDB soll ausprobiert und damit die Grundkonzepte einer NoSQL-Datenbank kennengelernt werden. Die Übung umfasst:

  • Testdaten erzeugen (JSON)
  • MongoDB per Docker Compose starten
  • JSON-Daten in MongoDB importieren
  • Abfragen und Aggregationen durchführen
  • Daten mit MongoDB Compass visualisieren
  • Docker + Docker Compose installiert
  • Browserzugang zu https://www.generatedata.com/
  • MongoDB Compass (GUI-Tool, verfügbar auf Windows/macOS/Linux)

Hinweis zu Shell-Befehlen:

  • Windows: Alle PowerShell-Befehle verwenden
  • macOS/Linux: Alle Bash-Befehle verwenden
  • Die Übung dokumentiert beide Varianten wo nötig

Verwende GenerateData.com zur Datengenerierung. Dieses Tool ist ähnlich wie Mockaroo.

  1. Öffne: https://generatedata.com/generator
  2. Du siehst ein “New Data Set” Formular mit einer Tabelle
  3. Die Tabelle hat Spalten: Data Type | Property Name | Examples | Options

Klicke auf “Select…” Dropdown unter “Data Type” und wähle den Feldtyp, dann gib den Namen ein.

Feld 1: GUID als order_id

Feld 2: Date als order_date Format: yyyy-MM-dd’T’HH:mm:ss’Z’

Feld 3: Number Range als customer_id Zwischen 1000 und 99999

Feld 4: Names als customer_name

Feld 5: Email als email

Feld 6: Country als country Wähle: AT, DE, CH

Feld 7: List als product_category Custom Values: Electronics, Books, Clothing, Home, Sports, Food

Feld 8: Fixed Number of Words als product_name Generate 2 words

Feld 9: Number Range als quantity Zwischen 1 und 20

Feld 10: Currency als unit_price Zwischen 10 und 500

Feld 11: Currency als total_amount Zwischen 10 und 10000

Feld 12: List als payment_method Custom Values: Credit Card, PayPal, Bank Transfer, Apple Pay

Feld 13: List als order_status Custom Values: pending, processing, shipped, delivered, cancelled

  1. Stelle die “Anzahl der Datensätze” auf 500 ein
  2. Scrolle nach unten und klick “Generate” Button
  3. Im unteren Panel siehst du die Live-Vorschau
  4. Klicke “GENERATE”
  1. Klicke “SAVE” oder “DOWNLOAD”
  2. Benenne um zu orders.json
  3. Speichere in mongodb-lab/data/ Ordner
  4. Überprüf: Datei sollte mit einem Array beginnen
{
"order_id": "A3952EF4-4DC7-74DC-BA51-1769AE379759",
"order_date": "2026-10-01T20:40:04Z",
"customer_id": 29433,
"customer_name": "Phoebe Gallagher",
"email": "[email protected]",
"country": "Sweden",
"product_category": "Food",
"product_name": "tellus id",
"quantity": 7,
"unit_price": 485,
"total_amount": "20 705",
"payment_method": "Bank Transfer",
"order_status": "shipped"
},

Erstelle Projekt-Ordner mongodb-lab/:

mongodb-lab/
docker-compose.yml
data/

Erstelle docker-compose.yml:

services:
mongodb:
image: mongo:7
container_name: mongodb
ports:
- "27017:27017"
volumes:
- mongodb_data:/data/db
- mongodb_config:/data/configdb
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: mongodb-password
restart: unless-stopped
mongo-express:
image: mongo-express:latest
container_name: mongo-express
ports:
- "8081:8081"
depends_on:
- mongodb
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: admin
ME_CONFIG_MONGODB_ADMINPASSWORD: mongodb-password
ME_CONFIG_MONGODB_URL: mongodb://admin:mongodb-password@mongodb:27017/
ME_CONFIG_BASICAUTH: false
restart: unless-stopped
volumes:
mongodb_data:
mongodb_config:

Im Projekt-Ordner mongodb-lab/:

Terminal-Fenster
docker compose up -d

Prüfe mit:

Terminal-Fenster
docker compose ps

Wenn beide Container laufen:

Mit MongoDB Express (Web-UI):

  1. Öffne http://localhost:8081
  2. Klicke “Create Database” und gib ecommerce ein
  3. Erstelle Collection orders

Mit MongoDB CLI (alternative):

Terminal-Fenster
docker exec -it mongodb mongosh -u admin -p mongodb-password --authenticationDatabase admin

Dann in der Konsole:

use ecommerce
db.createCollection("orders")

Das JSON-File soll als Array von Objekten vorhanden sein.

Navigiere zuerst in den mongodb-lab Ordner.

Terminal-Fenster
docker run --rm `
--network mongodb-lab_default `
-v "${PWD}/data:/data" `
mongo:7 `
mongoimport `
--authenticationDatabase admin `
-u admin `
-p mongodb-password `
--host mongodb:27017 `
--db ecommerce `
--collection orders `
--file /data/orders.json `
--jsonArray
Terminal-Fenster
docker run --rm \
--network mongodb-lab_default \
-v "$(pwd)/data:/data" \
mongo:7 \
mongoimport \
--authenticationDatabase admin \
-u admin \
-p mongodb-password \
--host mongodb:27017 \
--db ecommerce \
--collection orders \
--file /data/orders.json \
--jsonArray

Mit MongoDB Express:

  1. Öffne http://localhost:8081
  2. Wähle ecommerce Datenbank
  3. Klicke auf orders Collection
  4. Dokumente sollte angezeigt werden

Mit MongoDB CLI:

Terminal-Fenster
docker exec mongodb mongosh -u admin -p mongodb-password --authenticationDatabase admin -e "use ecommerce; db.orders.countDocuments()"

Sollte ~500 ausgeben.

Schreibe die folgenden Abfragen und dokumentiere die Ergebnisse.

Query 1: Alle Bestellungen mit Status delivered

  • Verwende find mit Filter auf order_status
  • Limit auf 10 Ergebnisse

Query 2: Bestellungen eines bestimmten Landes (AT)

  • Filter nach country Feld
  • Zeige 10 Ergebnisse
  • Probiere auch DE, CH, CZ

Query 3: Bestellungen mit Gesamtbetrag größer 500

  • Verwende GT Operator
  • Limit: 10 Ergebnisse

Query 4: Bestellungen ohne Kundennamen

  • Suche nach null oder nicht vorhanden
  • Normalerweise 0 Ergebnisse

Query 5: Durchschnittliche Bestellsumme pro Kategorie

  • Verwende aggregate mit GROUP
  • Berechne: Durchschnitt, Anzahl, Maximum
  • Sortiere absteigend

Query 6: Top 5 Länder nach Umsatz

  • Gruppiere nach country
  • Summiere total_amount
  • Top 5 nach Umsatz

Query 7: Bestellungen pro Zahlungsmethode und Status

  • Gruppiere nach payment_method UND order_status
  • Berechne: Anzahl, Durchschnittsbetrag

Query 8: Zeitreihe pro Tag und Kategorie

  • Filtere letzte 30 Tage
  • Formatiere Datum
  • Gruppiere nach Tag + Kategorie

Query 9: Ändere Status pending in processing

  • Verwende updateMany
  • Notiere: Wie viele Dokumente aktualisiert?

Query 10: Erhöhe PayPal-Bestellungen um 2%

  • Filter: payment_method = PayPal
  • Notiere: Wie viele aktualisiert?

MongoDB Compass ist die offizielle GUI für MongoDB.

Verfügbar auf Windows, macOS und Linux:

  1. Starte MongoDB Compass
  2. New Connection: mongodb://admin:mongodb-password@localhost:27017
  3. Klicke Connect
  4. Du siehst alle Datenbanken und Collections

Schritt 1: Daten durchstöbern

  • Klicke ecommerce → orders
  • Du siehst die ~500 Dokumente
  • Klicke auf ein Dokument

Schritt 2: Filter verwenden

  • Gib Filter ein: order_status = “delivered”
  • Probiere: country = “AT”
  • Probiere: total_amount > 500

Schritt 3: Aggregation Builder

  • Tab Aggregations
  • Add Stage: GROUP
  • ID: country
  • Aggregationen: total_revenue und order_count
  • Add Stage: SORT
  • Ergebnisse live sehen

Schritt 4: Schema analysieren

  • Tab Schema
  • Compass zeigt: Felder, Typen, Häufigkeit
  • Schreib Queries erst in Compass, dann ins Dokument
  • Mache Screenshots für Dokumentation
  • Nutze Aggregation Builder
  • Debugging: build step-by-step

Abzugebende Artefakte:

  • docker-compose.yml Datei
  • PDF oder Markdown mit:
    • JSON-Schema Beschreibung (Feldnamen, Typen)
    • Erste 3 Dokumente aus orders Collection (als JSON)
    • Anzahl der importierten Dokumente
  • Pro Query (1-10):
    • Vollständiger Query-Code
    • Kurze Beschreibung was die Query macht
    • Beispielergebnisse mit mindestens 5 Reihen
    • Screenshots aus MongoDB Compass (wenn möglich)
  • README.md mit:
    • Alle verwendeten Docker Commands
    • Der mongoimport Command
    • Befehle zum Ausführen der Queries
    • Anleitung zur MongoDB Compass Installation