Aufgabe 07 - MongoDB CRUD und Modellierung (Rezeptsammlung)
Aufgabe 07 - MongoDB CRUD und Modellierung (Rezeptsammlung)
Abschnitt betitelt „Aufgabe 07 - MongoDB CRUD und Modellierung (Rezeptsammlung)“Worum geht es?
Abschnitt betitelt „Worum geht es?“In dieser Übung werden Dokumente in MongoDB angelegt, abgefragt, geändert und gelöscht (siehe Kapitel 4 - NoSQL und alternative Datenmodelle). Szenario ist eine Rezeptsammlung mit Zutaten und Bewertungen. Im Expertenteil geht es um die zentrale Modellierungsfrage eingebettet gegen referenziert und um eine Aggregation Pipeline mit passendem Index.
Was Sie dafür brauchen
Abschnitt betitelt „Was Sie dafür brauchen“- Kapitel 4 - NoSQL und alternative Datenmodelle, Abschnitte MongoDB, CRUD und Aggregation.
- Eine MongoDB-Instanz und die Shell
mongosh(lokal oder im Container).
Welche Kompetenzen Sie erwerben und zeigen
Abschnitt betitelt „Welche Kompetenzen Sie erwerben und zeigen“- Sie legen Dokumente in Collections an und fragen sie mit Filtern ab.
- Sie nutzen Vergleichsoperatoren, Projektionen und Update-Operatoren.
- Sie entscheiden begründet zwischen Einbetten und Referenzieren.
- Sie bauen eine Aggregation Pipeline und legen einen passenden Index an.
Pädagogische Einordnung
Abschnitt betitelt „Pädagogische Einordnung“- Reproduktion: Dokumente einfügen und finden (Teil A).
- Reorganisation und Transfer: mit Operatoren filtern und ändern (Teile B und C).
- Reflexion, Problemlösung und Urteilsbildung: Datenmodell entscheiden und Auswertung bauen (Teil D).
Arbeitsaufträge
Abschnitt betitelt „Arbeitsaufträge“Die Übung ist auf etwa zwei Stunden ausgelegt. Teil D ist der Expertenteil.
Ausgangsdaten
Abschnitt betitelt „Ausgangsdaten“Legen Sie eine Collection rezepte an und fügen Sie mindestens drei Dokumente nach diesem Muster ein:
{ titel: "Kürbissuppe", kategorie: "Suppe", dauer_min: 30, vegetarisch: true, zutaten: ["Kürbis", "Zwiebel", "Gemüsebrühe"], bewertungen: [ { user: "lena", sterne: 5 }, { user: "tom", sterne: 4 } ]}Teil A - Anlegen und Finden
Abschnitt betitelt „Teil A - Anlegen und Finden“- Fügen Sie drei Rezepte mit
insertOnebzw.insertManyein. - Finden Sie alle vegetarischen Rezepte.
- Finden Sie alle Rezepte, die in höchstens 30 Minuten fertig sind.
Teil B - Operatoren und Projektion
Abschnitt betitelt „Teil B - Operatoren und Projektion“- Finden Sie mit
$lt/$gtalle Rezepte mit einer Dauer zwischen 20 und 45 Minuten. - Finden Sie mit
$inalle Rezepte der KategorienSuppeoderDessert. - Geben Sie mit einer Projektion nur
titelunddauer_minzurück, ohne das Feld_id.
Teil C - Ändern und Löschen
Abschnitt betitelt „Teil C - Ändern und Löschen“- Ergänzen Sie bei einem Rezept mit
$pusheine neue Bewertung. - Setzen Sie mit
$setbei einem Rezeptvegetarischauffalse. - Löschen Sie ein Rezept über seinen Titel und prüfen Sie das Ergebnis.
Teil D - Expertenteil: Modellierung und Aggregation
Abschnitt betitelt „Teil D - Expertenteil: Modellierung und Aggregation“-
Eingebettet gegen referenziert: Die Bewertungen sind aktuell eingebettet. Argumentieren Sie, ab wann eine eigene Collection
bewertungenmit Verweis (rezept_id) sinnvoller wäre. Nennen Sie zwei Kriterien und wenden Sie die Faustregel „Was zusammen gelesen wird, wird zusammen gespeichert” an. -
Aggregation Pipeline: Berechnen Sie je Kategorie die durchschnittliche Zubereitungsdauer und die Anzahl der Rezepte, absteigend nach Anzahl:
db.rezepte.aggregate([{ $group: { _id: "$kategorie",anzahl: { $sum: 1 },schnitt_dauer: { $avg: "$dauer_min" } } },{ $sort: { anzahl: -1 } }]);Erweitern Sie die Pipeline um eine
$match-Stufe, die vorher nur vegetarische Rezepte berücksichtigt. -
Index: Legen Sie einen Index an, der die häufige Abfrage „vegetarische Rezepte, nach Dauer sortiert” beschleunigt, und erklären Sie, warum ein Collection Scan ohne Index teurer ist.
Wissenscheck
Abschnitt betitelt „Wissenscheck“- Was ist der Unterschied zwischen einer Collection und einer Tabelle?
- Wozu dient das zweite Argument von
find(die Projektion)? - Wann bettet man verwandte Daten ein, wann referenziert man sie?
- Welche Rolle spielt die
$match-Stufe in einer Aggregation Pipeline? - Warum kostet ein Index Schreibleistung, beschleunigt aber Abfragen?
- Die Datei
aufgabe07_mongodb.jsmit allenmongosh-Befehlen. - Eine kurze schriftliche Begründung der Modellentscheidung aus Teil D.
HTL Villach, Schuljahr 2026-2027,
https://www.htl-villach.at