Symfoware

Symfowareについての考察blog

MongoDB PyMongo 2.7.1 よく使う機能のまとめ

MongoDBへPythonからPyMongoを使用して接続。
PyMongoのチュートリアルを試してみました。

PyMongo 2.7.1のインストールと使い方(チュートリアル)


チュートリアルに登場していない、よく使うことになりそうな機能を試してみます。


MongoClient



MongoDBに接続するためのオブジェクトです。
ドキュメントはこちら。
mongo_client – Tools for connecting to MongoDB

database_names()で、データベースの一覧表示。
drop_database(name_or_database)で、データベースの削除が行えます。


「mongo_test」というデータベースを作成して、名前を表示。
その後、データベースを削除するサンプルはこんな感じになりました。


  1. # -*- coding:utf-8 -*-
  2. import pymongo
  3. # MongoDBに接続
  4. client = pymongo.MongoClient('192.168.1.110', 27017)
  5. # データベース「mongo_test」を作成
  6. db = client.mongo_test
  7. # 適当にデータを挿入
  8. db.test_collection.insert({'test':'test'})
  9. # データベースの一覧を表示
  10. for database_name in client.database_names():
  11.     print(database_name)
  12. print('-'*10)
  13. # データベースを削除
  14. client.drop_database(db)
  15. # こちらでもok
  16. #client.drop_database('mongo_test')
  17. # 再度、データベース名を表示
  18. for database_name in client.database_names():
  19.     print(database_name)





実行後、「mongo_test」データベースが削除されたことが確認できます。


$ python sample.py
mongo_test
test_database
local
----------
test_database
local







データベース関連



データベースにあるコレクションの情報を取得してみます。
ドキュメントはこちら。
database – Database level operations


「mongo_test」データベースに「col_1」と「col_2」という2つのコレクションを作成。
コレクション名の一覧を表示したあと、「col_1」を削除してみます。


  1. # -*- coding:utf-8 -*-
  2. import pymongo
  3. # MongoDBに接続
  4. client = pymongo.MongoClient('192.168.1.110', 27017)
  5. # データベース「mongo_test」を作成
  6. db = client.mongo_test
  7. # col_1にデータを登録
  8. db.col_1.insert({'test':'test'})
  9. # col_2にデータを登録
  10. db.col_2.insert({'test':'test'})
  11. # コレクションの一覧を表示
  12. for collection_name in db.collection_names():
  13.     print(collection_name)
  14. print('-'*10)
  15. # col_1を削除
  16. db.drop_collection(db.col_1)
  17. # こちらでもok
  18. #db.drop_collection('col_1')
  19. # 再度、コレクションの一覧を表示
  20. for collection_name in db.collection_names():
  21.     print(collection_name)




system.indexesコレクションは自動的に作成されるコレクションです。
想定通り、col_1が削除出来ました。


$ python sample.py
system.indexes
col_2
col_1
----------
system.indexes
col_2







コレクション内のドキュメント操作



コレクションに登録されているドキュメントを操作してみます。
collection – Collection level operations


データの登録は「insert」を使用します。
サンプルはこんな感じ。


  1. # -*- coding:utf-8 -*-
  2. import pymongo
  3. # MongoDBに接続
  4. client = pymongo.MongoClient('192.168.1.110', 27017)
  5. db = client.mongo_test
  6. # test_collectionを取得
  7. col = db.test_collection
  8. # 「insert」でデータを登録
  9. col.insert({'number':1, 'value':u'number-1 data'})
  10. # findでデータを取得
  11. for doc in col.find():
  12.     print(doc)




自動的に「_id」フィールドが作成されます。


$ python sample.py
{u'_id': ObjectId('53d4985504f0a21fcf773263'), u'number': 1, u'value': u'number-1 data'}






このデータを更新したい場合は、「save」を使用します。
サンプルはこんな感じ。


  1. # -*- coding:utf-8 -*-
  2. import pymongo
  3. # MongoDBに接続
  4. client = pymongo.MongoClient('192.168.1.110', 27017)
  5. db = client.mongo_test
  6. # test_collectionを取得
  7. col = db.test_collection
  8. # find_oneで number:1のデータを取得
  9. doc = col.find_one({'number':1})
  10. # valueの内容を変更
  11. doc['value'] = 'nuber-1 data changed'
  12. # saveで保存
  13. col.save(doc)
  14. # findでデータを取得。内容を表示
  15. for doc in col.find():
  16.     print(doc)




ちゃんと値が変更されました。


$ python sample.py
{u'_id': ObjectId('53d4985504f0a21fcf773263'), u'number': 1, u'value': u'nuber-1 data changed'}





データを削除するには「remove」を使用します。


  1. # -*- coding:utf-8 -*-
  2. import pymongo
  3. # MongoDBに接続
  4. client = pymongo.MongoClient('192.168.1.110', 27017)
  5. db = client.mongo_test
  6. # test_collectionを取得
  7. col = db.test_collection
  8. print( col.find_one({'number':1}) )
  9. # removeで number:1のデータを削除
  10. col.remove({'number':1})
  11. print('-'*10)
  12. print( col.find_one({'number':1}) )




削除後、データが取得できないことが確認できました。


$ python sample.py
{u'_id': ObjectId('53d4985504f0a21fcf773263'), u'number': 1, u'value': u'nuber-1 data changed'}
----------
None






条件を指定してデータを更新したい場合は、「update」を使用します。
サンプルはこんな感じ。


  1. # -*- coding:utf-8 -*-
  2. import pymongo
  3. # MongoDBに接続
  4. client = pymongo.MongoClient('192.168.1.110', 27017)
  5. db = client.mongo_test
  6. # test_collectionを取得
  7. col = db.test_collection
  8. # 適当にテストデータを登録
  9. col.insert({'number':1, 'value':'number-1 value'})
  10. col.insert({'number':2, 'value':'number-2 value'})
  11. col.insert({'number':3, 'value':'number-3 value'})
  12. # 内容を表示
  13. for doc in col.find():
  14.     print(doc)
  15. # updateでnumber:2のデータを更新
  16. col.update({'number':2}, {'$set': {'value': 'number-2 value changed'}})
  17. print('-'*10)
  18. for doc in col.find():
  19.     print(doc)




狙った値だけ変更できました。


$ python sample.py
{u'_id': ObjectId('53d49daa04f0a223e2ea9cb5'), u'number': 1, u'value': u'number-1 value'}
{u'_id': ObjectId('53d49daa04f0a223e2ea9cb6'), u'number': 2, u'value': u'number-2 value'}
{u'_id': ObjectId('53d49daa04f0a223e2ea9cb7'), u'number': 3, u'value': u'number-3 value'}
----------
{u'_id': ObjectId('53d49daa04f0a223e2ea9cb5'), u'number': 1, u'value': u'number-1 value'}
{u'_id': ObjectId('53d49daa04f0a223e2ea9cb6'), u'number': 2, u'value': u'number-2 value changed'}
{u'_id': ObjectId('53d49daa04f0a223e2ea9cb7'), u'number': 3, u'value': u'number-3 value'}


関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2014/07/27(日) 15:39:30|
  2. MongoDB
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<MongoDB PyMongo 2.7.1で「_id」を自分で指定して、登録や検索を行う | ホーム | MongoDBのGUI管理ツール「Robomongo」をUbuntu 14.04にインストールする>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1433-0b078fa5
この記事にトラックバックする(FC2ブログユーザー)