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" ] } ],