読者です 読者をやめる 読者になる 読者になる

PythonからMongoDBをCRUD操作

MongoDBはHomebrewで、pymongoはpipでインストールすれば使える。

Create

前半は定型文。 datebaseとcollectionは、client.my_database.my_collectionでも作れる。 でも、のちのち名前を自由に付けたくなると思うのでStringを使った。 データはjsonライクなのをinsert()で書き込む。

>>> import pymongo
>>> client = pymongo.MongoClient('localhost', 27017)
>>> db = client['my_database']
>>> co = db['my_collection']
>>>
>>> data = [
...     {'a': 1, 'b': 2},
...     {'a': 3, 'b': 4, 'c': 5}
... ]
>>> result = co.insert(data)

Read

全データはfind()で取得できる。

>>> data = [d for d in co.find()]
>>> for d in data:
...     print d
...
{u'a': 1, u'_id': ObjectId('57ea7b568365d9a2cf95dfc3'), u'b': 2}
{u'a': 3, u'c': 5, u'_id': ObjectId('57ea7b568365d9a2cf95dfc4'), u'b': 4}

条件指定したい場合は、これもjsonライクに。

>>> print co.find({'a': 1})[0]
{u'a': 1, u'_id': ObjectId('57ea7b568365d9a2cf95dfc3'), u'b': 2}

Update

dictのlistにまたdictを追加したい場合は、再度insert()を使う。

>>> data = [
...     {'a': 6, 'b': 7}
... ]
>>> result = co.insert(data)
>>> data = [d for d in co.find()]
>>> for d in data:
...     print d
...
{u'a': 1, u'_id': ObjectId('57ea7b568365d9a2cf95dfc3'), u'b': 2}
{u'a': 3, u'c': 5, u'_id': ObjectId('57ea7b568365d9a2cf95dfc4'), u'b': 4}
{u'a': 6, u'_id': ObjectId('57ea7b568365d9a2cf95dfc5'), u'b': 7}

置換したい場合はupdate()を使う。 第一引数は条件、第二引数はkeyが'$set'で、valueが置換データのdictを指定。

>>> result = co.update({'a': 3}, {'$set': {'a': 100}})
>>> for d in co.find():
...     print d
...
{u'a': 1, u'_id': ObjectId('57ea7b568365d9a2cf95dfc3'), u'b': 2}
{u'a': 100, u'c': 5, u'_id': ObjectId('57ea7b568365d9a2cf95dfc4'), u'b': 4}
{u'a': 6, u'_id': ObjectId('57ea7b568365d9a2cf95dfc5'), u'b': 7}

Delete

特定のデータを削除したい場合は、remove()を使う。条件は引数で指定する。

>>> result = co.remove({'a': 1})
>>> for d in co.find():
...     print d
...
{u'a': 100, u'c': 5, u'_id': ObjectId('57ea7b568365d9a2cf95dfc4'), u'b': 4}
{u'a': 6, u'_id': ObjectId('57ea7b568365d9a2cf95dfc5'), u'b': 7}

collectionごと消し去りたい場合は、drop()を使う。

>>> result = co.drop()
>>> for d in co.find():
...     print d
...
>>>

参考文献