雑食性雑感雑記

知識の整理場。ため込んだ知識をブログ記事として再構築します。

Linux に MongoDB をインストール

概要

  • Linux 環境に MongoDB をインストール & 実行
  • Python で動かしてみる ( pymongo を使用 )。

環境

  • CentOS ( さくらVPS )
$ 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 インストール

$ 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
  • Path 通す。
# 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 を使用。
# pip install pymongo

pymongo で MongoDB 操作

  • 「Connection」モジュールで、MongoDB 内の DB を操作。
  • 「MongoClient」モジュールで、DB に接続してコレクションを操作。
# -*- coding: utf-8 -*-
from pymongo import Connection, MongoClient

# connect "hobby" db
client = MongoClient()  # デフォルト接続以外は IP と port を引数で指定。
hobby  = client.hobby

# create "music" collection 
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" } )

# check "music" collection
print "Collection \"music\" document count : {0}".format( music.count() )
print "\"{0}\" album count : {1}".format( "Kalafina", music.find( { "artist" : "Kalafina" } ).count() )

# show dbs
connection = Connection() # デフォルト接続以外は IP と port を引数で指定。
print "Database names : {0}".format( connection.database_names() )

## drop db
# connection.drop_database( "hobby" )
  • コレクション、ドキュメントをそれぞれ変数として持てるのが個人的に分かり易いので好き。
    • 今回は、hobby => music としてデータを入れられたので、何しているか変数名でわかる。