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 ... >>>