From 5acf4bf1ac662f3c88a3ee34e2d0262abbabe523 Mon Sep 17 00:00:00 2001 From: git-sandro Date: Sat, 23 May 2026 19:17:33 +0200 Subject: [PATCH] mongodb --- leistungsnachweis/.DS_Store | Bin 10244 -> 6148 bytes .../Task_6/Zoo-Aufgabe-MongoDB.ipynb | 210 ++++++++++++++++++ 2 files changed, 210 insertions(+) create mode 100644 leistungsnachweis/Task_6/Zoo-Aufgabe-MongoDB.ipynb diff --git a/leistungsnachweis/.DS_Store b/leistungsnachweis/.DS_Store index dc0cb88368f4f8b4ecad4daa19f413e52a7ad743..28b654b64cd6e67d5ec30d7c7962c00335a6687c 100644 GIT binary patch delta 417 zcmZn(XfcprU|?W$DortDU=RQ@Ie-{Mvv5r;6q~3gIoUvkMH0wokO5*wuv|QYK~B11 zaB_Zb!Dc~@<;;vSn|UM*n3!_XC(B96G3VyHOqLf=oGc??Ss%iX$WY9X%@EIE3ey5I z3kuj6kmP~dT#|C~lYnv@ei!dfdH&$IBan@zCWWAyf((e$Kz2;_5#U5}gBbxgm?67i zW{9QmFHAQ8)gat}OAWFcCYHK$0>cdiIJkk~CC0K@jpre=ATvZvfE!4=g2Edp_nmn% Rze)%zC`uSM$Mei#1^{;8SziDE literal 10244 zcmeHMeQXp}5P!2R?H*lVTMLxR=B}2nV6k_lAO*qewR}k{$hGuZiuJC$v}^Zv&)dCg zfz;F(#jix;SK>!P{J{7ZQKJ!KQ1lNmiW*Hr0*QpEiI^Dw>OYu(&fB-gU9YW;i6X*o z@^;?Ln|U`oncX+PIYJ18QgVP0A0dRtL8(|mNa0LEDv;)0be)a~R{=@@M^BCtBD*80q*Z0Gqu0<^VJqj#yfDL;2i!^L>k#*VeCD-x%pN;&DZ{%yumrQ?!mW zv)L`)d&$_~3^DY8Z4Hix~r#_JV1 z@jad?`vYDHI;&+I4ilxGwi3i!E~$P%)K1W6m&OAPV=d4e1w?~-HWBl0adL(Y-&WQ<&ZA}9e7 zys!*zfqK{gn_vrUgBECoT@ZmT*bUvFKp&`ZFARVMX&8ciupb_Thu|PQ0*}Je@GLwB z&%+^j1zv;K;V>M5x8QAf2R?*j@G%^RPvBGd5=P;B_yK-o9&$8m>D9_e<_=>6T3k0C zV?1QEW@XkL`Z&`3d~ag;UJ#x<-=&U7XP3}@)#v+>+4H@NmaV9}^|s)~t*v*B((D(? zg?X7g%;qP?z=;o^ci!hk%VpgNxDmJ>BS60oJ{*(=9Xi6O{pr9PEg|SSEg|d+=ZFJr zna`m?hmJ66o1%?vijnt73y@!rA|5rq()@!4}1Q3BMB(l$_K1y#B`unac_Lqe0R7|}u zrCR&MYJ@pctUWJ5J(S}&~T z5oa-=$3zXnIv%lB2K6yvxo|u0xr_^$EF?8k_>>R#sIyW?+QRc)W`8uPY#+n~%viMW zybXj=P7&fpS+$I$9gRDyB&m}k$3|IJWPIq#iUnm-SZe3R@6bk6^|Xp9kJy!E{yz=c zz9Of{S@IM4ja(qVlZ)gM6o3F_un-o(3aAA?1Yj+!gY^jFwm}=TBY=w`WYa(g1A*Hx z+z%u006Yv&!cz#^o`DzORRnB@;SB_A@552}z=mlj;cNH?&ce@d9)5u_xCocv53ZD} zBa1y*Z&iK%Hz2F_q3VHAG+< zKLWXaoIZHs#3X*8PS%g9bf)p6ZW=%8a{V~<^4c#Z@dI_TeoUn^jUOwg@ndDKAHR0h zpPa-G)XDlWmCiJN)L%38TQ=wE|5a}N=GJeLTfhA)^_%=gtdvMT;>WwgJo8Zl9$J-Oy sieH9<>iH?97tVtY9bwcqML9FQVt)j<{hKS@zj4ohn(+7vTutZypR@9BhyVZp diff --git a/leistungsnachweis/Task_6/Zoo-Aufgabe-MongoDB.ipynb b/leistungsnachweis/Task_6/Zoo-Aufgabe-MongoDB.ipynb new file mode 100644 index 0000000..f12964c --- /dev/null +++ b/leistungsnachweis/Task_6/Zoo-Aufgabe-MongoDB.ipynb @@ -0,0 +1,210 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Zoo-Verwaltung in MongoDB\n", + "\n", + "In diesem Beispiel soll die einfache Zoo-Verwaltung aus der Aufgabe zuvor in MongoDB umgesetzt werden. \n", + "\n", + "Installieren Sie dazu zunächst MongoDB auf Ihrem Rechner, hier finden Sie den Download und die Dokumentation zur Installation:\n", + "https://www.mongodb.com/try/download/community\n", + "\n", + "Um MongoDB in Python zu verwenden, benötigen Sie das Modul `pymongo`. Installieren Sie es mit dem folgenden Befehl:\n", + "\n", + " conda install conda-forge::pymongo\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# Client importieren\n", + "from pymongo import MongoClient" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'_id': ObjectId('6a11dd586a3df5c89e5f5388'), 'name': 'Ella', 'species': 'elephant'}\n" + ] + } + ], + "source": [ + "# TODO: Mit dieser Zelle können Sie testen, ob die Verbindung zur MongoDB-Datenbank funktioniert.\n", + "\n", + "# Verbindungsaufbau zu einer MongoDB-Datenbank\n", + "client = MongoClient('localhost', 27017)\n", + "\n", + "# Zoo-Datenbank erstellen\n", + "db = client['zoo']\n", + "\n", + "# Beispiel-Dokument in Collection 'animals' erstellen\n", + "db.animals.insert_one({'name': 'Ella', 'species': 'elephant'})\n", + "\n", + "# Alle Dokumente in Collection 'animals' ausgeben\n", + "for animal in db.animals.find():\n", + " print(animal)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Teilaufgabe 1 (4 Punkte): \n", + "\n", + "Fügen Sie im folgenden Dokumente ein, die die selben Informationen enthalten wie in der Aufgabe zuvor. Dabei sollen drei Tiere mit zwei Tierpflegern erstellt werden. Ein Tierpfleger versorgt mehrere Tiere, jedes Tier ist genau einem Tierpfleger zugeordnet. Ob Sie die Daten dabei normalisieren oder nicht, bleibt Ihnen überlassen." + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "InsertManyResult([ObjectId('6a11dd5a6a3df5c89e5f5389'), ObjectId('6a11dd5a6a3df5c89e5f538a'), ObjectId('6a11dd5a6a3df5c89e5f538b')], acknowledged=True)" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# TODO: Einfügen von Daten:\n", + "\n", + "db.animals.insert_many([\n", + " {\"name\": \"Babar\", \n", + " \"species\": \"Elephant\", \n", + " \"zookeeper\": [\n", + " {\"_id\": \"1\", \"name\": \"John Doe\"}\n", + " ]},\n", + " {\"name\": \"Dumbo\", \n", + " \"species\": \"Elephant\", \n", + " \"zookeeper\": [\n", + " {\"_id\": \"1\", \"name\": \"John Doe\"}\n", + " ]},\n", + " {\"name\": \"Melman\", \n", + " \"species\": \"Giraffe\", \n", + " \"zookeeper\": [\n", + " {\"_id\": \"2\", \"name\": \"Jane Doe\"}\n", + " ]},\n", + "])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Teilaufgabe 2 (3 Punkte): \n", + "\n", + "Erstellen Sie jetzt noch eine Funktion, die einen Überblick über alle Tiere im Zoo gibt, die Ausgabe soll dabei dem Beispiel ähneln." + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--------------------------------------------\n", + "| Ella \t | elephant \t | Nicht zugewiesen |\n", + "| Babar \t | Elephant \t | John Doe |\n", + "| Dumbo \t | Elephant \t | John Doe |\n", + "| Melman \t | Giraffe \t | Jane Doe |\n", + "--------------------------------------------\n" + ] + } + ], + "source": [ + "# TODO: Ausgabe aller Daten\n", + "def zoo_overview():\n", + " print(44 * \"-\")\n", + " for animal in db.animals.find():\n", + " keeper_name = animal.get(\"zookeeper\", [{}])[0].get(\"name\", \"Nicht zugewiesen\")\n", + " print(f\"| {animal[\"name\"]} \\t | {animal[\"species\"]} \\t | {keeper_name} |\")\n", + " print(44 * \"-\")\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", + "\n", + "# Testaufruf\n", + "zoo_overview()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Teilaufgabe 3 (3 Punkte): \n", + "\n", + "Begründen Sie, warum Sie die Struktur der Datenbank so gewählt haben, wie Sie es getan haben. \n", + "\n", + "Welche Vor- und Nachteile hat Ihre Lösung (für volle Punktzahl sollten Sie mindestens 2 Vor- und 2 Nachteile nennen)?\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Vorteile:\n", + "* Schnelle Performance. Da alle Informationen in einem Dokument gespeichert sind, reicht eine Datenbankabfrage aus um die vollständige Liste anzuzeigen\n", + "* Sollte es noch eine Collection für alle Zookepers geben, ist selbst bei Verlust dieser Collection die Datenverfügbarkeit gewährleistet\n", + "\n", + "Nachteile:\n", + "* Datenredundanz. Da jeder Pfleger mehrmals vorhanden sein kann, muss man bei einer Änderung alle Dokumente finden und aktualisieren\n", + "* Skalierprobleme. Da die Pfleger-Informationen bei jedem Tier wiederholt werden, wächst die Datenbank unnötig schnell an" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:base] *", + "language": "python", + "name": "conda-base-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.13.9" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}