Zum Inhalt springen

Aufgabe 07 - MongoDB CRUD und Modellierung (Rezeptsammlung)

Zu Zen-Modus wechseln

Aufgabe 07 - MongoDB CRUD und Modellierung (Rezeptsammlung)

Abschnitt betitelt „Aufgabe 07 - MongoDB CRUD und Modellierung (Rezeptsammlung)“

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.

  • 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.
  • 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).

Die Übung ist auf etwa zwei Stunden ausgelegt. Teil D ist der Expertenteil.

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 } ]
}
  1. Fügen Sie drei Rezepte mit insertOne bzw. insertMany ein.
  2. Finden Sie alle vegetarischen Rezepte.
  3. Finden Sie alle Rezepte, die in höchstens 30 Minuten fertig sind.
  1. Finden Sie mit $lt/$gt alle Rezepte mit einer Dauer zwischen 20 und 45 Minuten.
  2. Finden Sie mit $in alle Rezepte der Kategorien Suppe oder Dessert.
  3. Geben Sie mit einer Projektion nur titel und dauer_min zurück, ohne das Feld _id.
  1. Ergänzen Sie bei einem Rezept mit $push eine neue Bewertung.
  2. Setzen Sie mit $set bei einem Rezept vegetarisch auf false.
  3. 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“
  1. Eingebettet gegen referenziert: Die Bewertungen sind aktuell eingebettet. Argumentieren Sie, ab wann eine eigene Collection bewertungen mit Verweis (rezept_id) sinnvoller wäre. Nennen Sie zwei Kriterien und wenden Sie die Faustregel „Was zusammen gelesen wird, wird zusammen gespeichert” an.

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

  3. 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.

  1. Was ist der Unterschied zwischen einer Collection und einer Tabelle?
  2. Wozu dient das zweite Argument von find (die Projektion)?
  3. Wann bettet man verwandte Daten ein, wann referenziert man sie?
  4. Welche Rolle spielt die $match-Stufe in einer Aggregation Pipeline?
  5. Warum kostet ein Index Schreibleistung, beschleunigt aber Abfragen?
  • Die Datei aufgabe07_mongodb.js mit allen mongosh-Befehlen.
  • Eine kurze schriftliche Begründung der Modellentscheidung aus Teil D.

HTL Villach, Schuljahr 2026-2027,
https://www.htl-villach.at