pymongoの使い方

pymongoの使い方メモ。
使ったのはPyMongo 2.1.1。

インストール

pip install pymongo

Connectionとdb,collectionの取得

>>> import pymongo
>>> conn = pymongo.Connection('localhost', 27017)
>>> conn
Connection('localhost', 27017)
>>> db = conn.mydb
>>> db
Database(Connection('localhost', 27017), u'mydb')
>>> coll = db.mycoll
>>> coll
Collection(Database(Connection('localhost', 27017), u'mydb'), u'mycoll')
>>> 

Insert

collection.insertに辞書を渡す。

>>> import string
>>> for char in string.ascii_letters:
...     coll.insert({'char':char, 'code':ord(char)})
... 

辞書はあらかじめ作成しておいてもよい。

>>> doc = dict((x, ord(x)) for x in string.ascii_letters)
>>> coll.insert(doc)
ObjectId('4f4250a77fedcb0c8f000034')
>>>

検索

ObjectIDで抽出
>>> from pymongo.objectid import ObjectId
>>> coll.find_one({'_id' : ObjectId('4f4250a77fedcb0c8f000034')}){u'z': 122, u'A': 65, u'C': 67, u'B': 66, u'E': 69, u'D': 68, u'G': 71, u'F': 70, u'I': 73, u'H': 72, u'K': 75, u'J': 74, u'M': 77, u'L': 76, u'O': 79, u'N': 78, u'Q': 81, u'P': 80, u'S': 83, u'R': 82, u'U': 85, u'T': 84, u'W': 87, u'V': 86, u'Y': 89, u'X': 88, u'Z': 90, u'a': 97, u'c': 99, u'b': 98, u'e': 101, u'd': 100, u'g': 103, u'f': 102, u'i': 105, u'h': 104, u'k': 107, u'j': 106, u'm': 109, u'l': 108, u'o': 111, u'n': 110, u'q': 113, u'p': 112, u's': 115, u'r': 114, u'u': 117, u't': 116, u'w': 119, u'v': 118, u'y': 121, u'x': 120, u'_id': ObjectId('4f4250a77fedcb0c8f000034')}
>>> 
条件を指定

普通にkeyとvalueを指定

>>> coll.find_one({'char':'A'})
{u'char': u'A', u'_id': ObjectId('4f424ed77fedcb0c8f00001a'), u'code': 65}
>>>

正規表現を使ってみる

>>> import re
>>> for doc in coll.find({'char':re.compile(r'^[a-c]')}):
...     print(doc)
... 
{u'char': u'a', u'_id': ObjectId('4f424ed77fedcb0c8f000000'), u'code': 97}
{u'char': u'b', u'_id': ObjectId('4f424ed77fedcb0c8f000001'), u'code': 98}
{u'char': u'c', u'_id': ObjectId('4f424ed77fedcb0c8f000002'), u'code': 99}
>>> 

条件演算子のいろいろ

>>> for doc in coll.find({'code':{'$lte':70}}):
...     print(doc)
... 
{u'char': u'A', u'_id': ObjectId('4f424ed77fedcb0c8f00001a'), u'code': 65}
{u'char': u'B', u'_id': ObjectId('4f424ed77fedcb0c8f00001b'), u'code': 66}
{u'char': u'C', u'_id': ObjectId('4f424ed77fedcb0c8f00001c'), u'code': 67}
{u'char': u'D', u'_id': ObjectId('4f424ed77fedcb0c8f00001d'), u'code': 68}
{u'char': u'E', u'_id': ObjectId('4f424ed77fedcb0c8f00001e'), u'code': 69}
{u'char': u'F', u'_id': ObjectId('4f424ed77fedcb0c8f00001f'), u'code': 70}
>>> 
>>> for doc in coll.find({'code':{'$gte':115}}):
...     print(doc)
... 
{u'char': u's', u'_id': ObjectId('4f424ed77fedcb0c8f000012'), u'code': 115}
{u'char': u't', u'_id': ObjectId('4f424ed77fedcb0c8f000013'), u'code': 116}
{u'char': u'u', u'_id': ObjectId('4f424ed77fedcb0c8f000014'), u'code': 117}
{u'char': u'v', u'_id': ObjectId('4f424ed77fedcb0c8f000015'), u'code': 118}
{u'char': u'w', u'_id': ObjectId('4f424ed77fedcb0c8f000016'), u'code': 119}
{u'char': u'x', u'_id': ObjectId('4f424ed77fedcb0c8f000017'), u'code': 120}
{u'char': u'y', u'_id': ObjectId('4f424ed77fedcb0c8f000018'), u'code': 121}
{u'char': u'z', u'_id': ObjectId('4f424ed77fedcb0c8f000019'), u'code': 122}
>>> 
>>> for doc in coll.find({'code':{'$in':range(90,100)}}):
...     print(doc)
... 
{u'char': u'a', u'_id': ObjectId('4f424ed77fedcb0c8f000000'), u'code': 97}
{u'char': u'b', u'_id': ObjectId('4f424ed77fedcb0c8f000001'), u'code': 98}
{u'char': u'c', u'_id': ObjectId('4f424ed77fedcb0c8f000002'), u'code': 99}
{u'char': u'Z', u'_id': ObjectId('4f424ed77fedcb0c8f000033'), u'code': 90}
>>> 
>>> for doc in coll.find({'code':{'$nin':range(60,120)}}):
...     print(doc)
... 
{u'char': u'x', u'_id': ObjectId('4f424ed77fedcb0c8f000017'), u'code': 120}
{u'char': u'y', u'_id': ObjectId('4f424ed77fedcb0c8f000018'), u'code': 121}
{u'char': u'z', u'_id': ObjectId('4f424ed77fedcb0c8f000019'), u'code': 122}
{u'z': 122, u'A': 65, u'C': 67, u'B': 66, u'E': 69, u'D': 68, u'G': 71, u'F': 70, u'I': 73, u'H': 72, u'K': 75, u'J': 74, u'M': 77, u'L': 76, u'O': 79, u'N': 78, u'Q': 81, u'P': 80, u'S': 83, u'R': 82, u'U': 85, u'T': 84, u'W': 87, u'V': 86, u'Y': 89, u'X': 88, u'Z': 90, u'a': 97, u'c': 99, u'b': 98, u'e': 101, u'd': 100, u'g': 103, u'f': 102, u'i': 105, u'h': 104, u'k': 107, u'j': 106, u'm': 109, u'l': 108, u'o': 111, u'n': 110, u'q': 113, u'p': 112, u's': 115, u'r': 114, u'u': 117, u't': 116, u'w': 119, u'v': 118, u'y': 121, u'x': 120, u'_id': ObjectId('4f4250a77fedcb0c8f000034')}
>>> 
>>> for doc in coll.find({'char':{'$not':re.compile(r'[a-z]')}}):
...     print(doc)
... 
{u'char': u'A', u'_id': ObjectId('4f424ed77fedcb0c8f00001a'), u'code': 65}
{u'char': u'B', u'_id': ObjectId('4f424ed77fedcb0c8f00001b'), u'code': 66}
{u'char': u'C', u'_id': ObjectId('4f424ed77fedcb0c8f00001c'), u'code': 67}
{u'char': u'D', u'_id': ObjectId('4f424ed77fedcb0c8f00001d'), u'code': 68}
{u'char': u'E', u'_id': ObjectId('4f424ed77fedcb0c8f00001e'), u'code': 69}
{u'char': u'F', u'_id': ObjectId('4f424ed77fedcb0c8f00001f'), u'code': 70}
{u'char': u'G', u'_id': ObjectId('4f424ed77fedcb0c8f000020'), u'code': 71}
{u'char': u'H', u'_id': ObjectId('4f424ed77fedcb0c8f000021'), u'code': 72}
{u'char': u'I', u'_id': ObjectId('4f424ed77fedcb0c8f000022'), u'code': 73}
{u'char': u'J', u'_id': ObjectId('4f424ed77fedcb0c8f000023'), u'code': 74}
{u'char': u'K', u'_id': ObjectId('4f424ed77fedcb0c8f000024'), u'code': 75}
{u'char': u'L', u'_id': ObjectId('4f424ed77fedcb0c8f000025'), u'code': 76}
{u'char': u'M', u'_id': ObjectId('4f424ed77fedcb0c8f000026'), u'code': 77}
{u'char': u'N', u'_id': ObjectId('4f424ed77fedcb0c8f000027'), u'code': 78}
{u'char': u'O', u'_id': ObjectId('4f424ed77fedcb0c8f000028'), u'code': 79}
{u'char': u'P', u'_id': ObjectId('4f424ed77fedcb0c8f000029'), u'code': 80}
{u'char': u'Q', u'_id': ObjectId('4f424ed77fedcb0c8f00002a'), u'code': 81}
{u'char': u'R', u'_id': ObjectId('4f424ed77fedcb0c8f00002b'), u'code': 82}
{u'char': u'S', u'_id': ObjectId('4f424ed77fedcb0c8f00002c'), u'code': 83}
{u'char': u'T', u'_id': ObjectId('4f424ed77fedcb0c8f00002d'), u'code': 84}
{u'char': u'U', u'_id': ObjectId('4f424ed77fedcb0c8f00002e'), u'code': 85}
{u'char': u'V', u'_id': ObjectId('4f424ed77fedcb0c8f00002f'), u'code': 86}
{u'char': u'W', u'_id': ObjectId('4f424ed77fedcb0c8f000030'), u'code': 87}
{u'char': u'X', u'_id': ObjectId('4f424ed77fedcb0c8f000031'), u'code': 88}
{u'char': u'Y', u'_id': ObjectId('4f424ed77fedcb0c8f000032'), u'code': 89}
{u'char': u'Z', u'_id': ObjectId('4f424ed77fedcb0c8f000033'), u'code': 90}
{u'z': 122, u'A': 65, u'C': 67, u'B': 66, u'E': 69, u'D': 68, u'G': 71, u'F': 70, u'I': 73, u'H': 72, u'K': 75, u'J': 74, u'M': 77, u'L': 76, u'O': 79, u'N': 78, u'Q': 81, u'P': 80, u'S': 83, u'R': 82, u'U': 85, u'T': 84, u'W': 87, u'V': 86, u'Y': 89, u'X': 88, u'Z': 90, u'a': 97, u'c': 99, u'b': 98, u'e': 101, u'd': 100, u'g': 103, u'f': 102, u'i': 105, u'h': 104, u'k': 107, u'j': 106, u'm': 109, u'l': 108, u'o': 111, u'n': 110, u'q': 113, u'p': 112, u's': 115, u'r': 114, u'u': 117, u't': 116, u'w': 119, u'v': 118, u'y': 121, u'x': 120, u'_id': ObjectId('4f4250a77fedcb0c8f000034')}
>>> 
>>> coll.find_one({'char':{'$exists':False}})
{u'z': 122, u'A': 65, u'C': 67, u'B': 66, u'E': 69, u'D': 68, u'G': 71, u'F': 70, u'I': 73, u'H': 72, u'K': 75, u'J': 74, u'M': 77, u'L': 76, u'O': 79, u'N': 78, u'Q': 81, u'P': 80, u'S': 83, u'R': 82, u'U': 85, u'T': 84, u'W': 87, u'V': 86, u'Y': 89, u'X': 88, u'Z': 90, u'a': 97, u'c': 99, u'b': 98, u'e': 101, u'd': 100, u'g': 103, u'f': 102, u'i': 105, u'h': 104, u'k': 107, u'j': 106, u'm': 109, u'l': 108, u'o': 111, u'n': 110, u'q': 113, u'p': 112, u's': 115, u'r': 114, u'u': 117, u't': 116, u'w': 119, u'v': 118, u'y': 121, u'x': 120, u'_id': ObjectId('4f4250a77fedcb0c8f000034')}
>>> 
全件抽出
>>> for doc in collection.find():
...     print(doc)
...

update

>>> coll.find_one({'char':'a'})
{u'char': u'a', u'_id': ObjectId('4f424ed77fedcb0c8f000000'), u'code': 97}
>>> doc = coll.find_one({'char':'a'})
>>> doc.update({'code':100})
>>> coll.save(doc)
ObjectId('4f424ed77fedcb0c8f000000')
>>> coll.find_one({'char':'a'})
{u'char': u'a', u'_id': ObjectId('4f424ed77fedcb0c8f000000'), u'code': 100}
>>> 

remove

>>> coll.find_one({'A':65})
{u'z': 122, u'A': 65, u'C': 67, u'B': 66, u'E': 69, u'D': 68, u'G': 71, u'F': 70, u'I': 73, u'H': 72, u'K': 75, u'J': 74, u'M': 77, u'L': 76, u'O': 79, u'N': 78, u'Q': 81, u'P': 80, u'S': 83, u'R': 82, u'U': 85, u'T': 84, u'W': 87, u'V': 86, u'Y': 89, u'X': 88, u'Z': 90, u'a': 97, u'c': 99, u'b': 98, u'e': 101, u'd': 100, u'g': 103, u'f': 102, u'i': 105, u'h': 104, u'k': 107, u'j': 106, u'm': 109, u'l': 108, u'o': 111, u'n': 110, u'q': 113, u'p': 112, u's': 115, u'r': 114, u'u': 117, u't': 116, u'w': 119, u'v': 118, u'y': 121, u'x': 120, u'_id': ObjectId('4f4250a77fedcb0c8f000034')}
>>> doc = coll.find_one({'A':65})
>>> coll.remove(doc)
>>> coll.find_one({'A':65})
>>> 
>>> coll.remove({'char':re.compile(r'[A-Z]')})
>>> for doc in coll.find():
...     print(doc)
... 
{u'char': u'a', u'_id': ObjectId('4f424ed77fedcb0c8f000000'), u'code': 100}
{u'char': u'b', u'_id': ObjectId('4f424ed77fedcb0c8f000001'), u'code': 98}
{u'char': u'c', u'_id': ObjectId('4f424ed77fedcb0c8f000002'), u'code': 99}
{u'char': u'd', u'_id': ObjectId('4f424ed77fedcb0c8f000003'), u'code': 100}
{u'char': u'e', u'_id': ObjectId('4f424ed77fedcb0c8f000004'), u'code': 101}
{u'char': u'f', u'_id': ObjectId('4f424ed77fedcb0c8f000005'), u'code': 102}
{u'char': u'g', u'_id': ObjectId('4f424ed77fedcb0c8f000006'), u'code': 103}
{u'char': u'h', u'_id': ObjectId('4f424ed77fedcb0c8f000007'), u'code': 104}
{u'char': u'i', u'_id': ObjectId('4f424ed77fedcb0c8f000008'), u'code': 105}
{u'char': u'j', u'_id': ObjectId('4f424ed77fedcb0c8f000009'), u'code': 106}
{u'char': u'k', u'_id': ObjectId('4f424ed77fedcb0c8f00000a'), u'code': 107}
{u'char': u'l', u'_id': ObjectId('4f424ed77fedcb0c8f00000b'), u'code': 108}
{u'char': u'm', u'_id': ObjectId('4f424ed77fedcb0c8f00000c'), u'code': 109}
{u'char': u'n', u'_id': ObjectId('4f424ed77fedcb0c8f00000d'), u'code': 110}
{u'char': u'o', u'_id': ObjectId('4f424ed77fedcb0c8f00000e'), u'code': 111}
{u'char': u'p', u'_id': ObjectId('4f424ed77fedcb0c8f00000f'), u'code': 112}
{u'char': u'q', u'_id': ObjectId('4f424ed77fedcb0c8f000010'), u'code': 113}
{u'char': u'r', u'_id': ObjectId('4f424ed77fedcb0c8f000011'), u'code': 114}
{u'char': u's', u'_id': ObjectId('4f424ed77fedcb0c8f000012'), u'code': 115}
{u'char': u't', u'_id': ObjectId('4f424ed77fedcb0c8f000013'), u'code': 116}
{u'char': u'u', u'_id': ObjectId('4f424ed77fedcb0c8f000014'), u'code': 117}
{u'char': u'v', u'_id': ObjectId('4f424ed77fedcb0c8f000015'), u'code': 118}
{u'char': u'w', u'_id': ObjectId('4f424ed77fedcb0c8f000016'), u'code': 119}
{u'char': u'x', u'_id': ObjectId('4f424ed77fedcb0c8f000017'), u'code': 120}
{u'char': u'y', u'_id': ObjectId('4f424ed77fedcb0c8f000018'), u'code': 121}
{u'char': u'z', u'_id': ObjectId('4f424ed77fedcb0c8f000019'), u'code': 122}
>>> 
>>> coll.remove()
>>> coll.find_one()
>>> 

close

>>> coll.close()