{ "cells": [ { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from pymongo import MongoClient" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "MongoClient('localhost', 27017)\n" ] } ], "source": [ "# Privzet host in port\n", "# client = MongoClient()\n", "# ali eksplicitno\n", "client = MongoClient('localhost', 27017)\n", "print(client)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Database(MongoClient('localhost', 27017), 'test')\n" ] } ], "source": [ "# Priklop v bazo (zbirko) test. Ustvari, ce ne obstaja.\n", "db = client['test']\n", "print(db)" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "['doc', 'mdbjadralec', 'rezervacija', 'coln', 'studenti', 'jadralec']" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "db.collection_names()" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Ustvari zbirko in vstavi enega studenta\n", "db.studenti.insert_one({\"ime\": \"janko\", \"priimek\": \"novak\"})\n", "db.studenti.insert_one({\"ime\": \"peter\", \"priimek\": \"klepec\"})\n", "db.studenti.insert_one({\"ime\": \"janez\", \"priimek\": \"novak\"})" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Brisi zbirko\n", "db.studenti.drop()" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'ime': 'janko', 'starost': 25, 'priimek': 'novak', '_id': ObjectId('5694d87b2ed9621760e24dda')}\n", "{'ime': 'peter', 'priimek': 'klepec', '_id': ObjectId('5694d87b2ed9621760e24ddb')}\n", "{'ime': 'janez', 'priimek': 'novak', '_id': ObjectId('5694d87b2ed9621760e24ddc')}\n" ] } ], "source": [ "for s in db.studenti.find():\n", " print(s)" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{'_id': ObjectId('5694d87b2ed9621760e24dda'),\n", " 'ime': 'janko',\n", " 'priimek': 'novak'}" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "db.studenti.find_one({'priimek': \"novak\"})" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[{'_id': ObjectId('5694d87b2ed9621760e24dda'),\n", " 'ime': 'janko',\n", " 'priimek': 'novak'},\n", " {'_id': ObjectId('5694d87b2ed9621760e24ddc'),\n", " 'ime': 'janez',\n", " 'priimek': 'novak'}]" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(db.studenti.find({'priimek': \"novak\"}))" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[{'_id': ObjectId('5694d87b2ed9621760e24ddb'),\n", " 'ime': 'peter',\n", " 'priimek': 'klepec'}]" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(db.studenti.find({'priimek': {\"$ne\": \"novak\"}}))" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[{'_id': ObjectId('5694d87b2ed9621760e24dda'),\n", " 'ime': 'janko',\n", " 'priimek': 'novak'},\n", " {'_id': ObjectId('5694d87b2ed9621760e24ddc'),\n", " 'ime': 'janez',\n", " 'priimek': 'novak'}]" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(db.studenti.find({'priimek': {\"$in\": [\"novak\"]}}))" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[{'_id': ObjectId('5694d87b2ed9621760e24ddb'),\n", " 'ime': 'peter',\n", " 'priimek': 'klepec'}]" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(db.studenti.find({'priimek': {\"$nin\": [\"novak\",\"kovac\"]}}))" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[{'_id': ObjectId('5694d87b2ed9621760e24dda'),\n", " 'ime': 'janko',\n", " 'priimek': 'novak'},\n", " {'_id': ObjectId('5694d87b2ed9621760e24ddb'),\n", " 'ime': 'peter',\n", " 'priimek': 'klepec'},\n", " {'_id': ObjectId('5694d87b2ed9621760e24ddc'),\n", " 'ime': 'janez',\n", " 'priimek': 'novak'}]" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(db.studenti.find({'ime': {\"$exists\": 1}}))\n", " " ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[{'_id': ObjectId('5693fa0b2ed9620aacd5b8e0'),\n", " 'ime': 'janko',\n", " 'priimek': 'novak',\n", " 'starost': '25'},\n", " {'_id': ObjectId('5693fa0b2ed9620aacd5b8e2'),\n", " 'ime': 'janez',\n", " 'priimek': 'novak'},\n", " {'_id': ObjectId('5694537e2ed9621760e24db6'),\n", " 'ime': 'janko',\n", " 'priimek': 'novak'},\n", " {'_id': ObjectId('5694537e2ed9621760e24db8'),\n", " 'ime': 'janez',\n", " 'priimek': 'novak'}]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(db.studenti.find({'$or': [{'ime': 'janko'},{'ime': 'janez'}]}))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Posodabljanje in/ali dodajanje polja" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "db.studenti.update_one({\"ime\": \"janko\"}, {'$set' : {'starost' : 25}}) " ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "db.doc.insert_one( { 'ime' : \"Janko\",\n", " 'priimek' : \"Novak\",\n", " 'knjige' : [\n", " { 'avtorjev' : 3, 'strani' : 100},\n", " { 'avtorjev' : 5, 'strani' : 50},\n", " { 'avtorjev' : 8, 'strani' : 400}\n", " ]\n", " } )\n" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{'_id': ObjectId('569421562ed9620aacd5b8e3'),\n", " 'ime': 'Janko',\n", " 'knjige': [{'avtorjev': 3, 'strani': 100},\n", " {'avtorjev': 5, 'strani': 50},\n", " {'avtorjev': 8, 'strani': 400}],\n", " 'priimek': 'Novak'}" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "db.doc.find_one()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Kreiramo ne-enoličen naraščajoč indeks" ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'priimek_1'" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pymongo\n", "db.studenti.create_index([('priimek', pymongo.ASCENDING)], unique=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Jadralci v MongoDB" ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "collapsed": true }, "outputs": [], "source": [ "db.jadralec.drop()" ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Jadralci\n", "db.jadralec.insert_one( {\"jid\": 22, \"ime\" : \"Darko\", \"rating\": 7, \"starost\":45.0} )\n", "db.jadralec.insert_one( {\"jid\": 29, \"ime\" : \"Borut\", \"rating\": 1, \"starost\":33.0} )\n", "db.jadralec.insert_one( {\"jid\": 31, \"ime\" : \"Lojze\", \"rating\": 8, \"starost\":55.5} )\n", "db.jadralec.insert_one( {\"jid\": 32, \"ime\" : \"Andrej\", \"rating\": 8, \"starost\":25.5} )\n", "db.jadralec.insert_one( {\"jid\": 58, \"ime\" : \"Rajko\", \"rating\": 10, \"starost\":35.0} )\n", "db.jadralec.insert_one( {\"jid\": 64, \"ime\" : \"Henrik\", \"rating\": 7, \"starost\":35.0} )\n", "db.jadralec.insert_one( {\"jid\": 71, \"ime\" : \"Zdravko\", \"rating\": 10, \"starost\":16.0} )\n", "db.jadralec.insert_one( {\"jid\": 74, \"ime\" : \"Henrik\", \"rating\": 9, \"starost\":35.0} )\n", "db.jadralec.insert_one( {\"jid\": 85, \"ime\" : \"Anze\", \"rating\": 3, \"starost\":25.5} )\n", "db.jadralec.insert_one( {\"jid\": 95, \"ime\" : \"Bine\", \"rating\": 3, \"starost\":63.5} )\n" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'jid_1'" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "db.jadralec.create_index([('jid', pymongo.ASCENDING)], unique=True)" ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "collapsed": true }, "outputs": [], "source": [ "db.coln.drop()" ] }, { "cell_type": "code", "execution_count": 67, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ "db.coln.insert_one( {\"cid\": 101, \"ime\" : \"Elan\", \"dolzina\": 34, \"barva\": \"modra\"} )\n", "db.coln.insert_one( {\"cid\": 102, \"ime\" : \"Elan\", \"dolzina\": 34, \"barva\": \"rdeca\"} )\n", "db.coln.insert_one( {\"cid\": 103, \"ime\" : \"Sun Odyssey\", \"dolzina\": 37, \"barva\": \"zelena\"} )\n", "db.coln.insert_one( {\"cid\": 104, \"ime\" : \"Bavaria\", \"dolzina\": 50, \"barva\": \"rdeca\"} )\n" ] }, { "cell_type": "code", "execution_count": 68, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'cid_1'" ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "db.coln.create_index([('cid', pymongo.ASCENDING)], unique=True)" ] }, { "cell_type": "code", "execution_count": 69, "metadata": { "collapsed": true }, "outputs": [], "source": [ "db.rezervacija.drop()" ] }, { "cell_type": "code", "execution_count": 70, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "db.rezervacija.insert_one( {\"jid\": 22, \"cid\" : 101, \"dan\": \"2006-10-10\" } )\n", "db.rezervacija.insert_one( {\"jid\": 22, \"cid\" : 102, \"dan\": \"2006-10-10\" } )\n", "db.rezervacija.insert_one( {\"jid\": 22, \"cid\" : 103, \"dan\": \"2006-10-8\" } )\n", "db.rezervacija.insert_one( {\"jid\": 22, \"cid\" : 104, \"dan\": \"2006-10-7\" } ) \n", "db.rezervacija.insert_one( {\"jid\": 31, \"cid\" : 102, \"dan\": \"2006-11-10\" } )\n", "db.rezervacija.insert_one( {\"jid\": 31, \"cid\" : 103, \"dan\": \"2006-11-6\" } )\n", "db.rezervacija.insert_one( {\"jid\": 31, \"cid\" : 104, \"dan\": \"2006-11-12\" } )\n", "db.rezervacija.insert_one( {\"jid\": 64, \"cid\" : 101, \"dan\": \"2006-9-5\" } )\n", "db.rezervacija.insert_one( {\"jid\": 64, \"cid\" : 102, \"dan\": \"2006-9-8\" } )\n", "db.rezervacija.insert_one( {\"jid\": 74, \"cid\" : 103, \"dan\": \"2006-9-8\" } )\n" ] }, { "cell_type": "code", "execution_count": 71, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'cid_1_jid_1_dan_1'" ] }, "execution_count": 71, "metadata": {}, "output_type": "execute_result" } ], "source": [ "db.rezervacija.create_index([('cid', pymongo.ASCENDING),\n", " ('jid', pymongo.ASCENDING), \n", " ('dan', pymongo.ASCENDING)],unique=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Primer stičnega ekvivalenta" ] }, { "cell_type": "code", "execution_count": 73, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# STIK: Poišči vse Darkove rezervacije\n", "darko = db.jadralec.find_one({\"ime\" : \"Darko\"})\n", "rez = db.rezervacija.find( {\"jid\" : darko[\"jid\"]} )\n", "#for r in rez:\n", "# print (r)\n" ] }, { "cell_type": "code", "execution_count": 74, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[{'_id': ObjectId('5694dd0f2ed9621760e24dec'),\n", " 'cid': 101,\n", " 'dan': '2006-10-10',\n", " 'jid': 22},\n", " {'_id': ObjectId('5694dd0f2ed9621760e24ded'),\n", " 'cid': 102,\n", " 'dan': '2006-10-10',\n", " 'jid': 22},\n", " {'_id': ObjectId('5694dd0f2ed9621760e24dee'),\n", " 'cid': 103,\n", " 'dan': '2006-10-8',\n", " 'jid': 22},\n", " {'_id': ObjectId('5694dd0f2ed9621760e24def'),\n", " 'cid': 104,\n", " 'dan': '2006-10-7',\n", " 'jid': 22}]" ] }, "execution_count": 74, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(rez)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### S fleksibilno MongoDB shemo lahko strukturo poenostavimo" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Darko in njegove rezervacije\n", "db.mdbjadralec.insert_one(\n", " {\"jid\": 22, \"ime\" : \"Darko\", \"rating\": 7, \"starost\":45.0,\n", " \"rezervacija\" : [\n", " {\"cid\" : 101, \"dan\": \"2006-10-10\" },\n", " {\"cid\" : 102, \"dan\": \"2006-10-10\" },\n", " {\"cid\" : 103, \"dan\": \"2006-10-8\" },\n", " {\"cid\" : 104, \"dan\": \"2006-10-7\" } \n", " ]\n", " }\n", ")" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Lojzetove rezervacije\n", "db.mdbjadralec.insert_one(\n", " {\"jid\": 31, \"ime\" : \"Lojze\", \"rating\": 8, \"starost\": 55.5,\n", " \"rezervacija\" : [\n", " {\"cid\" : 102, \"dan\": \"2006-11-10\" },\n", " {\"cid\" : 103, \"dan\": \"2006-11-6\" },\n", " {\"cid\" : 104, \"dan\": \"2006-11-12\" } \n", " ]\n", " }\n", ")\n" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[{'_id': ObjectId('569446672ed9620aacd5b914'),\n", " 'ime': 'Darko',\n", " 'jid': 22,\n", " 'rating': 7,\n", " 'rezervacija': [{'cid': 101, 'dan': '2006-10-10'},\n", " {'cid': 102, 'dan': '2006-10-10'},\n", " {'cid': 103, 'dan': '2006-10-8'},\n", " {'cid': 104, 'dan': '2006-10-7'}],\n", " 'starost': 45.0},\n", " {'_id': ObjectId('5694472d2ed9620aacd5b915'),\n", " 'ime': 'Lojze',\n", " 'jid': 31,\n", " 'rating': 8,\n", " 'rezervacija': [{'cid': 102, 'dan': '2006-11-10'},\n", " {'cid': 103, 'dan': '2006-11-6'},\n", " {'cid': 104, 'dan': '2006-11-12'}],\n", " 'starost': 55.5},\n", " {'_id': ObjectId('569453ae2ed9621760e24dd2'),\n", " 'ime': 'Darko',\n", " 'jid': 22,\n", " 'rating': 7,\n", " 'rezervacija': [{'cid': 101, 'dan': '2006-10-10'},\n", " {'cid': 102, 'dan': '2006-10-10'},\n", " {'cid': 103, 'dan': '2006-10-8'},\n", " {'cid': 104, 'dan': '2006-10-7'}],\n", " 'starost': 45.0},\n", " {'_id': ObjectId('569453af2ed9621760e24dd3'),\n", " 'ime': 'Lojze',\n", " 'jid': 31,\n", " 'rating': 8,\n", " 'rezervacija': [{'cid': 102, 'dan': '2006-11-10'},\n", " {'cid': 103, 'dan': '2006-11-6'},\n", " {'cid': 104, 'dan': '2006-11-12'}],\n", " 'starost': 55.5}]" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(db.mdbjadralec.find())" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "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.4.3" } }, "nbformat": 4, "nbformat_minor": 0 }