From f44ab769e16855a420f7d072b8be058629616f5c Mon Sep 17 00:00:00 2001 From: DotNaos Date: Sun, 18 May 2025 20:15:12 +0200 Subject: [PATCH] Mongo DB Task --- .../MongoDB_Aufgabe_Daten.ipynb | 105 +++++++++++++----- 1 file changed, 76 insertions(+), 29 deletions(-) diff --git a/code/online-part-2b/MongoDB_Aufgabe_Daten.ipynb b/code/online-part-2b/MongoDB_Aufgabe_Daten.ipynb index a653bee..975fc47 100644 --- a/code/online-part-2b/MongoDB_Aufgabe_Daten.ipynb +++ b/code/online-part-2b/MongoDB_Aufgabe_Daten.ipynb @@ -19,7 +19,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -29,9 +29,26 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'_id': ObjectId('682a229550b2441237573064'), 'name': 'Ella', 'species': 'elephant'}\n", + "{'_id': ObjectId('682a229950b2441237573066'), 'name': 'Ella', 'species': 'elephant'}\n", + "{'_id': ObjectId('682a229950b2441237573067'), 'name': 'Babar', 'species': 'Elephant', 'zookeeper': 'John Doe'}\n", + "{'_id': ObjectId('682a229950b2441237573068'), 'name': 'Dumbo', 'species': 'Elephant', 'zookeeper': 'John Doe'}\n", + "{'_id': ObjectId('682a229950b2441237573069'), 'name': 'Melman', 'species': 'Giraffe', 'zookeeper': 'Jane Doe'}\n", + "{'_id': ObjectId('682a22f050b244123757306b'), 'name': 'Ella', 'species': 'elephant'}\n", + "{'_id': ObjectId('682a22f050b244123757306c'), 'name': 'Babar', 'species': 'Elephant', 'zookeeper': 'John Doe'}\n", + "{'_id': ObjectId('682a22f050b244123757306d'), 'name': 'Dumbo', 'species': 'Elephant', 'zookeeper': 'John Doe'}\n", + "{'_id': ObjectId('682a22f050b244123757306e'), 'name': 'Melman', 'species': 'Giraffe', 'zookeeper': 'Jane Doe'}\n", + "{'_id': ObjectId('682a239c50b2441237573070'), 'name': 'Ella', 'species': 'elephant'}\n" + ] + } + ], "source": [ "# TODO: Mit dieser Zelle können Sie testen, ob die Verbindung zur MongoDB-Datenbank funktioniert.\n", "\n", @@ -60,18 +77,28 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "InsertManyResult([ObjectId('682a239c50b2441237573071'), ObjectId('682a239c50b2441237573072'), ObjectId('682a239c50b2441237573073')], acknowledged=True)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# TODO: Einfügen von Daten:\n", - "\n", - "# db.animals.insert_one(...)\n", - "# db.animals.insert_many(...)\n", - "\n", - "# Falls Sie mehrere Collections nutzen...\n", - "\n", - "# db.zookeeper.insert_one(...)" + "# Einfügen von Beispieldaten:\n", + "db.animals.delete_many({})\n", + "db.animals.insert_many([\n", + " {'name': 'Babar', 'species': 'Elephant', 'zookeeper': 'John Doe'},\n", + " {'name': 'Dumbo', 'species': 'Elephant', 'zookeeper': 'John Doe'},\n", + " {'name': 'Melman', 'species': 'Giraffe', 'zookeeper': 'Jane Doe'}\n", + "])\n" ] }, { @@ -85,26 +112,36 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--------------------------------\n", + "| Babar | Elephant | John Doe |\n", + "| Dumbo | Elephant | John Doe |\n", + "| Melman | Giraffe | Jane Doe |\n", + "--------------------------------\n" + ] + } + ], "source": [ - "# TODO: Ausgabe aller Daten\n", + "# Ausgabe aller Daten\n", "def zoo_overview():\n", - " pass\n", - "\n", - "# Beispielausgabe:\n", - "#\n", - "# ----------------------------------------\n", - "# | Babar | Elephant | John Doe |\n", - "# | Dumbo | Elephant | John Doe |\n", - "# | Hathi | Elephant | John Doe |\n", - "# | Melman | Giraffe | Jane Doe |\n", - "# | Gloria | Giraffe | Jane Doe |\n", - "# ----------------------------------------\n", + " animals = list(db.animals.find({'zookeeper': {'$exists': True}}))\n", + " name_width = max(len(a['name']) for a in animals)\n", + " species_width = max(len(a['species']) for a in animals)\n", + " zk_width = max(len(a['zookeeper']) for a in animals)\n", + " sep = '-' * (name_width + species_width + zk_width + 10)\n", + " print(sep)\n", + " for a in animals:\n", + " print(f\"| {a['name']:<{name_width}} | {a['species']:<{species_width}} | {a['zookeeper']:<{zk_width}} |\")\n", + " print(sep)\n", "\n", "# Testaufruf\n", - "zoo_overview()" + "zoo_overview()\n" ] }, { @@ -122,7 +159,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Antwort: " + "Antwort: \n", + "\n", + "Ich habe mich für eine eingebettete Struktur entschieden, bei der der Name des Tierpflegers direkt in den Tierdokumenten gespeichert wird. Dadurch liegen alle relevanten Informationen in einem Dokument vor und Joins oder Aggregationen sind nicht nötig.\n", + "\n", + "**Vorteile:**\n", + "- Schnelle und einfache Abfragen ohne Joins.\n", + "- Einfaches Datenmodell mit geringer Komplexität.\n", + "\n", + "**Nachteile:**\n", + "- Datenredundanz, da Tierpflegerdaten in mehreren Dokumenten wiederholt werden.\n", + "- Risiko von Inkonsistenzen bei Änderungen an Tierpflegerdaten.\n" ] } ],