Aufgabe 10 - MongoDB
Aufgabe 10 - MongoDB
Abschnitt betitelt „Aufgabe 10 - MongoDB“Worum geht es?
Abschnitt betitelt „Worum geht es?“In dieser Übung werden die Grundkonzepte einer dokumentenorientierten NoSQL-Datenbank ausprobiert: JSON-Testdaten erzeugen, MongoDB per Docker starten, importieren, abfragen und mit der Aggregation Pipeline auswerten (siehe Kapitel 4 - DBMS Markt, Dokumentendatenbanken). Im Expertenteil geht es um komplexe Aggregationen und die Frage embedded gegen referenced.
Was Sie dafür brauchen
Abschnitt betitelt „Was Sie dafür brauchen“- Docker und Docker Compose.
- Browserzugang zu generatedata.com; MongoDB Compass.
- Kapitel 4 - DBMS Markt (Dokumentendatenbanken).
Welche Kompetenzen Sie erwerben und zeigen
Abschnitt betitelt „Welche Kompetenzen Sie erwerben und zeigen“- Sie erzeugen und importieren JSON-Dokumente.
- Sie fragen Dokumente mit Filtern und Operatoren ab.
- Sie werten Daten mit der Aggregation Pipeline aus.
- Sie beurteilen das Datenmodell (embedded gegen referenced) und den Einsatz gegenüber relationalen Datenbanken.
Pädagogische Einordnung
Abschnitt betitelt „Pädagogische Einordnung“- Reproduktion: Testdaten erzeugen (Teil A).
- Reorganisation und Transfer: importieren und einfach abfragen (Teile B und C).
- Reflexion, Problemlösung und Urteilsbildung: aggregieren und das Modell beurteilen (Teil D).
Arbeitsaufträge
Abschnitt betitelt „Arbeitsaufträge“Die Übung ist auf etwa zwei Stunden ausgelegt. Teil D ist der Expertenteil.
Teil A - Testdaten erzeugen
Abschnitt betitelt „Teil A - Testdaten erzeugen“- Auf generatedata.com einen Datensatz mit rund 500 Bestell-Dokumenten mit den Feldern
order_id(GUID),order_date(Datum),customer_id,customer_name,email,country(AT/DE/CH),product_category(Electronics, Books, …),product_name,quantity,unit_price,total_amount,payment_method,order_status(pending … cancelled) erzeugen und alsorders.json(Array von Objekten) exportieren.
Teil B - Stack starten und importieren
Abschnitt betitelt „Teil B - Stack starten und importieren“-
Einen Projektordner
mongodb-lab/mitdocker-compose.yml(Servicesmongo:7mit Root-User undmongo-express) anlegen und mitdocker compose up -dstarten; die Mongo-Express-UI unterhttp://localhost:8081prüfen. -
Eine Datenbank
ecommerceund eine Collectionordersanlegen (per Mongo-Express odermongosh). -
orders.jsonmitmongoimport --jsonArrayimportieren (über einen wegwerfbarenmongo:7-Container, derdata/mountet) und die Dokumentzahl prüfen:Terminal-Fenster docker exec mongodb mongosh -u admin -p mongodb-password --authenticationDatabase admin \-e "use ecommerce; db.orders.countDocuments()"
Teil C - Einfache Abfragen und Updates
Abschnitt betitelt „Teil C - Einfache Abfragen und Updates“- find mit Filtern: alle Bestellungen mit
order_status: "delivered"(Limit 10); Bestellungen eines Landes (country: "AT", auch DE/CH testen); Bestellungen mittotal_amountgrößer 500 ($gt); Bestellungen ohne Kundennamen (nulloder nicht vorhanden, meist 0). - updateMany: alle
pending-Bestellungen aufprocessingsetzen und die Zahl der aktualisierten Dokumente notieren; die Beträge der PayPal-Bestellungen um 2 % erhöhen.
Teil D - Expertenteil: Aggregation Pipeline und Datenmodell
Abschnitt betitelt „Teil D - Expertenteil: Aggregation Pipeline und Datenmodell“- Aggregationen: Formulieren Sie mit
db.orders.aggregate([...]):- durchschnittliche Bestellsumme, Anzahl und Maximum je
product_category, absteigend sortiert; - die Top 5 Länder nach summiertem
total_amount; - Anzahl und Durchschnittsbetrag je Kombination aus
payment_methodundorder_status(Gruppierung nach zwei Feldern); - eine Zeitreihe: Bestellungen je Tag und Kategorie (Datum mit
$dateToStringformatieren, gruppieren). Erklären Sie an einer dieser Abfragen die Rolle der Stufen$match,$groupund$sort.
- durchschnittliche Bestellsumme, Anzahl und Maximum je
- Compass: Dieselbe „Top-Länder”-Auswertung im Aggregation Builder von MongoDB Compass nachbauen und im Schema-Tab die Feldtypen und ihre Häufigkeit betrachten. Ein Feld nennen, dessen Typ uneinheitlich ist (z. B.
total_amountals Zahl und als String), und erklären, warum das in einem schemaflexiblen System passieren kann. - Datenmodell beurteilen: Das aktuelle Dokument ist flach: Kundendaten (
customer_id,customer_name,email,country) stehen in jeder Bestellung. Diskutieren Sie in vier bis fünf Sätzen, ob die Kundendaten besser eingebettet bleiben oder in eine eigene Collection referenziert werden sollten. Nennen Sie je ein Argument für beide Varianten und entscheiden Sie begründet. - NoSQL oder relational: In drei bis vier Sätzen begründen, für welche Anforderungen dieser Bestelldaten eine Dokumentendatenbank passt und wann eine relationale Datenbank die bessere Wahl wäre (etwa komplexe Joins, strenge Transaktionen über mehrere Entitäten).
Wissenscheck
Abschnitt betitelt „Wissenscheck“- Worin unterscheidet sich ein MongoDB-Dokument von einer Tabellenzeile?
- Wozu dienen die Stufen
$match,$groupund$sortin einer Pipeline? - Wann bettet man verwandte Daten ein, wann referenziert man sie?
- Warum kann in MongoDB dasselbe Feld unterschiedliche Typen haben?
- Für welche Anforderungen ist eine relationale Datenbank hier besser geeignet?
- Das
docker-compose.ymlund ein Dokument mit JSON-Schema-Beschreibung, den ersten drei Dokumenten und der importierten Dokumentzahl. - Je Query (1–10) der Code, eine kurze Beschreibung und Beispielergebnisse; wo möglich Compass-Screenshots.
- Die Aggregationen und die Datenmodell-Bewertung aus Teil D sowie ein
README.mdmit allen Docker- und Import-Befehlen.
HTL Villach, 2025-2026,
https://www.htl-villach.at