概要
- Linux 環境に MongoDB をインストール & 実行
- Python で動かしてみる ( pymongo を使用 )。
環境
$ cat /proc/version
Linux version 2.6.32-358.14.1.el6.x86_64 (mockbuild@c6b10.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC) ) #1 SMP Tue Jul 16 23:51:20 UTC 2013
MongoDB について、簡単に…
- Mongo の語源 : huMONGOus = ばかでかい
- オープンソースのドキュメント指向データベース ( ≠ リレーショナルデータベース )
- 「データベース」⇔「コレクション」⇔「ドキュメント ( JSON ) 」
MongoDB インストール
- wget を利用。
- ダウンロードして解凍したらすぐに使える状態。適当な場所に置く。
$ su -
# wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-2.5.4.tgz
# tar zxvf mongodb-linux-x86_64-2.5.4.tgz
# mv mongodb-linux-x86_64-2.5.4 /usr/local/mongo
# vi /etc/profile.d/mongo.sh
( 新規作成 )
export MONGO_HOME=/usr/local/mongo
export PATH=$PATH:$MONGO_HOME/bin
MongoDB 起動 & 確認
- デフォルトデータディレクトリ ( /data/db ) を作成し、「mongod」コマンドで起動。
# mkdir -p /data/db
# mongod
( エラーが出ないことを確認 )
- 別コンソールで、「mongo」コマンドにより使用できることを確認。
$ mongo
> show dbs
> use hobby
> db.manga.save({"title" : "ディスコミュニケーション", "author" : "植芝 理一", "publisher" : "講談社"})
> db.manga.save({"title" : "もやしもん", "author" : "石川 雅之", "publisher" : "講談社" } )
> db.manga.save({"title" : "花と奥たん", "author" : "高橋 しん", "publisher" : "小学館" })
> db.manga.count()
> db.manga.find({"publisher" : "講談社"})
> exit
pymongo インストール
- MongoDB を Python で操作するためのモジュール「pymongo」をインストール。
- pip or easy_install で簡単に入る。
# pip install pymongo
pymongo で MongoDB 操作
- 「Connection」モジュールで、MongoDB 内の DB を操作。
- 「MongoClient」モジュールで、DB に接続してコレクションを操作。
from pymongo import Connection, MongoClient
client = MongoClient()
hobby = client.hobby
music = hobby.music
music.save( { "artist" : "Kalafina", "album" : "Consolation" } )
music.save( { "artist" : "Kalafina", "album" : "After Eden" } )
music.save( { "artist" : "Mami Kawata", "album" : "BIRTH" } )
music.save( { "artist" : "supercell", "album" : "Today Is A Beautiful Day" } )
print "Collection \"music\" document count : {0}".format( music.count() )
print "\"{0}\" album count : {1}".format( "Kalafina", music.find( { "artist" : "Kalafina" } ).count() )
connection = Connection()
print "Database names : {0}".format( connection.database_names() )
- コレクション、ドキュメントをそれぞれ変数として持てるのが個人的に分かり易いので好き。
- 今回は、hobby => music としてデータを入れられたので、何しているか変数名でわかる。