In [38]:
from pymongo import MongoClient
In [39]:
# Privzet host in port
# client = MongoClient()
# ali eksplicitno
client = MongoClient('localhost', 27017)
print(client)
MongoClient('localhost', 27017)
In [40]:
# Priklop v bazo (zbirko) test. Ustvari, ce ne obstaja.
db = client['test']
print(db)
Database(MongoClient('localhost', 27017), 'test')
In [41]:
db.collection_names()
Out[41]:
['doc', 'mdbjadralec', 'rezervacija', 'coln', 'studenti', 'jadralec']
In [49]:
# Ustvari zbirko in vstavi enega studenta
db.studenti.insert_one({"ime": "janko", "priimek": "novak"})
db.studenti.insert_one({"ime": "peter", "priimek": "klepec"})
db.studenti.insert_one({"ime": "janez", "priimek": "novak"})
Out[49]:
<pymongo.results.InsertOneResult at 0x5535ea0>
In [48]:
# Brisi zbirko
db.studenti.drop()
In [59]:
for s in db.studenti.find():
    print(s)
{'ime': 'janko', 'starost': 25, 'priimek': 'novak', '_id': ObjectId('5694d87b2ed9621760e24dda')}
{'ime': 'peter', 'priimek': 'klepec', '_id': ObjectId('5694d87b2ed9621760e24ddb')}
{'ime': 'janez', 'priimek': 'novak', '_id': ObjectId('5694d87b2ed9621760e24ddc')}
In [51]:
db.studenti.find_one({'priimek': "novak"})
Out[51]:
{'_id': ObjectId('5694d87b2ed9621760e24dda'),
 'ime': 'janko',
 'priimek': 'novak'}
In [52]:
list(db.studenti.find({'priimek': "novak"}))
Out[52]:
[{'_id': ObjectId('5694d87b2ed9621760e24dda'),
  'ime': 'janko',
  'priimek': 'novak'},
 {'_id': ObjectId('5694d87b2ed9621760e24ddc'),
  'ime': 'janez',
  'priimek': 'novak'}]
In [53]:
list(db.studenti.find({'priimek': {"$ne": "novak"}}))
Out[53]:
[{'_id': ObjectId('5694d87b2ed9621760e24ddb'),
  'ime': 'peter',
  'priimek': 'klepec'}]
In [54]:
list(db.studenti.find({'priimek': {"$in": ["novak"]}}))
Out[54]:
[{'_id': ObjectId('5694d87b2ed9621760e24dda'),
  'ime': 'janko',
  'priimek': 'novak'},
 {'_id': ObjectId('5694d87b2ed9621760e24ddc'),
  'ime': 'janez',
  'priimek': 'novak'}]
In [55]:
list(db.studenti.find({'priimek': {"$nin": ["novak","kovac"]}}))
Out[55]:
[{'_id': ObjectId('5694d87b2ed9621760e24ddb'),
  'ime': 'peter',
  'priimek': 'klepec'}]
In [56]:
list(db.studenti.find({'ime': {"$exists": 1}}))
  
Out[56]:
[{'_id': ObjectId('5694d87b2ed9621760e24dda'),
  'ime': 'janko',
  'priimek': 'novak'},
 {'_id': ObjectId('5694d87b2ed9621760e24ddb'),
  'ime': 'peter',
  'priimek': 'klepec'},
 {'_id': ObjectId('5694d87b2ed9621760e24ddc'),
  'ime': 'janez',
  'priimek': 'novak'}]
In [17]:
list(db.studenti.find({'$or': [{'ime': 'janko'},{'ime': 'janez'}]}))
Out[17]:
[{'_id': ObjectId('5693fa0b2ed9620aacd5b8e0'),
  'ime': 'janko',
  'priimek': 'novak',
  'starost': '25'},
 {'_id': ObjectId('5693fa0b2ed9620aacd5b8e2'),
  'ime': 'janez',
  'priimek': 'novak'},
 {'_id': ObjectId('5694537e2ed9621760e24db6'),
  'ime': 'janko',
  'priimek': 'novak'},
 {'_id': ObjectId('5694537e2ed9621760e24db8'),
  'ime': 'janez',
  'priimek': 'novak'}]

Posodabljanje in/ali dodajanje polja

In [58]:
db.studenti.update_one({"ime": "janko"}, {'$set' : {'starost' : 25}})       
Out[58]:
<pymongo.results.UpdateResult at 0x476e360>
In [60]:
db.doc.insert_one( { 'ime' : "Janko",
        'priimek' : "Novak",
        'knjige' : [
            { 'avtorjev' : 3, 'strani' : 100},
            { 'avtorjev' : 5, 'strani' : 50},
            { 'avtorjev' : 8, 'strani' : 400}
        ]
    } )
Out[60]:
<pymongo.results.InsertOneResult at 0x5535900>
In [61]:
db.doc.find_one()
Out[61]:
{'_id': ObjectId('569421562ed9620aacd5b8e3'),
 'ime': 'Janko',
 'knjige': [{'avtorjev': 3, 'strani': 100},
  {'avtorjev': 5, 'strani': 50},
  {'avtorjev': 8, 'strani': 400}],
 'priimek': 'Novak'}

Kreiramo ne-enoličen naraščajoč indeks

In [62]:
import pymongo
db.studenti.create_index([('priimek', pymongo.ASCENDING)], unique=False)
Out[62]:
'priimek_1'

Jadralci v MongoDB

In [63]:
db.jadralec.drop()
In [64]:
# Jadralci
db.jadralec.insert_one( {"jid": 22, "ime" : "Darko",   "rating":  7, "starost":45.0} )
db.jadralec.insert_one( {"jid": 29, "ime" : "Borut",   "rating":  1, "starost":33.0} )
db.jadralec.insert_one( {"jid": 31, "ime" : "Lojze",   "rating":  8, "starost":55.5} )
db.jadralec.insert_one( {"jid": 32, "ime" : "Andrej",  "rating":  8, "starost":25.5} )
db.jadralec.insert_one( {"jid": 58, "ime" : "Rajko",   "rating": 10, "starost":35.0} )
db.jadralec.insert_one( {"jid": 64, "ime" : "Henrik",  "rating":  7, "starost":35.0} )
db.jadralec.insert_one( {"jid": 71, "ime" : "Zdravko", "rating": 10, "starost":16.0} )
db.jadralec.insert_one( {"jid": 74, "ime" : "Henrik",  "rating":  9, "starost":35.0} )
db.jadralec.insert_one( {"jid": 85, "ime" : "Anze",    "rating":  3, "starost":25.5} )
db.jadralec.insert_one( {"jid": 95, "ime" : "Bine",    "rating":  3, "starost":63.5} )
Out[64]:
<pymongo.results.InsertOneResult at 0x5535d38>
In [65]:
db.jadralec.create_index([('jid', pymongo.ASCENDING)], unique=True)
Out[65]:
'jid_1'
In [66]:
db.coln.drop()
In [67]:
db.coln.insert_one( {"cid": 101, "ime" : "Elan",        "dolzina":  34, "barva": "modra"} )
db.coln.insert_one( {"cid": 102, "ime" : "Elan",        "dolzina":  34, "barva": "rdeca"} )
db.coln.insert_one( {"cid": 103, "ime" : "Sun Odyssey", "dolzina":  37, "barva": "zelena"} )
db.coln.insert_one( {"cid": 104, "ime" : "Bavaria",     "dolzina":  50, "barva": "rdeca"} )
Out[67]:
<pymongo.results.InsertOneResult at 0x5535d80>
In [68]:
db.coln.create_index([('cid', pymongo.ASCENDING)], unique=True)
Out[68]:
'cid_1'
In [69]:
db.rezervacija.drop()
In [70]:
db.rezervacija.insert_one( {"jid": 22, "cid" : 101, "dan": "2006-10-10" } )
db.rezervacija.insert_one( {"jid": 22, "cid" : 102, "dan": "2006-10-10" } )
db.rezervacija.insert_one( {"jid": 22, "cid" : 103, "dan": "2006-10-8" } )
db.rezervacija.insert_one( {"jid": 22, "cid" : 104, "dan": "2006-10-7" } ) 
db.rezervacija.insert_one( {"jid": 31, "cid" : 102, "dan": "2006-11-10" } )
db.rezervacija.insert_one( {"jid": 31, "cid" : 103, "dan": "2006-11-6" } )
db.rezervacija.insert_one( {"jid": 31, "cid" : 104, "dan": "2006-11-12" } )
db.rezervacija.insert_one( {"jid": 64, "cid" : 101, "dan": "2006-9-5" } )
db.rezervacija.insert_one( {"jid": 64, "cid" : 102, "dan": "2006-9-8" } )
db.rezervacija.insert_one( {"jid": 74, "cid" : 103, "dan": "2006-9-8" } )
Out[70]:
<pymongo.results.InsertOneResult at 0x55356c0>
In [71]:
db.rezervacija.create_index([('cid', pymongo.ASCENDING),
                             ('jid', pymongo.ASCENDING), 
                             ('dan', pymongo.ASCENDING)],unique=True)
Out[71]:
'cid_1_jid_1_dan_1'

Primer stičnega ekvivalenta

In [73]:
# STIK: Poišči vse Darkove rezervacije
darko = db.jadralec.find_one({"ime" : "Darko"})
rez =  db.rezervacija.find( {"jid" : darko["jid"]} )
#for r in rez:
#    print (r)
In [74]:
list(rez)
Out[74]:
[{'_id': ObjectId('5694dd0f2ed9621760e24dec'),
  'cid': 101,
  'dan': '2006-10-10',
  'jid': 22},
 {'_id': ObjectId('5694dd0f2ed9621760e24ded'),
  'cid': 102,
  'dan': '2006-10-10',
  'jid': 22},
 {'_id': ObjectId('5694dd0f2ed9621760e24dee'),
  'cid': 103,
  'dan': '2006-10-8',
  'jid': 22},
 {'_id': ObjectId('5694dd0f2ed9621760e24def'),
  'cid': 104,
  'dan': '2006-10-7',
  'jid': 22}]

S fleksibilno MongoDB shemo lahko strukturo poenostavimo

In [35]:
# Darko in njegove rezervacije
db.mdbjadralec.insert_one(
    {"jid": 22, "ime" : "Darko",   "rating":  7, "starost":45.0,
     "rezervacija" : [
         {"cid" : 101, "dan": "2006-10-10" },
         {"cid" : 102, "dan": "2006-10-10" },
         {"cid" : 103, "dan": "2006-10-8" },
         {"cid" : 104, "dan": "2006-10-7" }   
     ]
    }
)
Out[35]:
<pymongo.results.InsertOneResult at 0x55353f0>
In [36]:
# Lojzetove rezervacije
db.mdbjadralec.insert_one(
    {"jid": 31, "ime" : "Lojze",   "rating":  8, "starost": 55.5,
     "rezervacija" : [
         {"cid" : 102, "dan": "2006-11-10" },
         {"cid" : 103, "dan": "2006-11-6" },
         {"cid" : 104, "dan": "2006-11-12" }   
     ]
    }
)
Out[36]:
<pymongo.results.InsertOneResult at 0x5535750>
In [37]:
list(db.mdbjadralec.find())
Out[37]:
[{'_id': ObjectId('569446672ed9620aacd5b914'),
  'ime': 'Darko',
  'jid': 22,
  'rating': 7,
  'rezervacija': [{'cid': 101, 'dan': '2006-10-10'},
   {'cid': 102, 'dan': '2006-10-10'},
   {'cid': 103, 'dan': '2006-10-8'},
   {'cid': 104, 'dan': '2006-10-7'}],
  'starost': 45.0},
 {'_id': ObjectId('5694472d2ed9620aacd5b915'),
  'ime': 'Lojze',
  'jid': 31,
  'rating': 8,
  'rezervacija': [{'cid': 102, 'dan': '2006-11-10'},
   {'cid': 103, 'dan': '2006-11-6'},
   {'cid': 104, 'dan': '2006-11-12'}],
  'starost': 55.5},
 {'_id': ObjectId('569453ae2ed9621760e24dd2'),
  'ime': 'Darko',
  'jid': 22,
  'rating': 7,
  'rezervacija': [{'cid': 101, 'dan': '2006-10-10'},
   {'cid': 102, 'dan': '2006-10-10'},
   {'cid': 103, 'dan': '2006-10-8'},
   {'cid': 104, 'dan': '2006-10-7'}],
  'starost': 45.0},
 {'_id': ObjectId('569453af2ed9621760e24dd3'),
  'ime': 'Lojze',
  'jid': 31,
  'rating': 8,
  'rezervacija': [{'cid': 102, 'dan': '2006-11-10'},
   {'cid': 103, 'dan': '2006-11-6'},
   {'cid': 104, 'dan': '2006-11-12'}],
  'starost': 55.5}]
In [ ]: