MongoDBをWindows環境にインストール

LithiumにはRDBMSよりNoSQLでやればもしかしてうまくいくのでは…と思ったので(どのチュートリアルでも採用している)MongoDBを使ってもう一度Lithiumにチャレンジしてみようかと思い立ち、まずはMongoDBについて知っておきたい。


NoSQLは自分の今の環境では到底使わないだろうなーと思ってスルーしていたんだけど、今日こそは。


MongoDB本体をダウンロード

↓ここにある。
http://www.mongodb.org/


ダウンロードしてきたら展開して、自分はD:\xamppの中へ"mongodb"とリネームして入れた。
まずはWindowsのサービスに登録したい。

D:
cd xampp\mongodb\bin
mongod --install

エラー。どうやらログを取るために--logpathをつけないといけないらしい。

mongod --install --logpath D:\xampp\mongodb\log.txt

とかにしてみる。これでサービス登録は成功。
じゃあ起動だー!と喜ぶ前に、ちゃんとメッセージを読む。
データベースは/data/db/に保存されるらしいので、先にフォルダを作っておく必要がある。
しかも残念な感じなんですが、デフォルトはCドライブのほう。
C:\data\db
を作ってから、

net start "MongoDB"

もしくは
『コンピュータの管理』→『サービスとアプリケーション』→『サービス』
の一覧から"Mongo DB"を開始でもいける。

いやいや、データが分かれるのはナンなのでやっぱりmongodbフォルダの中に保存しましょう。
起動時の設定で変えられました。一旦mongoDBサービスを停止、削除。

net stop "mongoDB"
mongod --remove

そしてもう一度。

mongod --install --logpath D:\xampp\mongodb\log.txt --dbpath D:\xampp\mongodb\data\db


確認としては、プロンプトで

mongo

を実行すれば動いているところが見られる。


詳しくはこのあたりで。
http://www.mongodb.org/display/DOCS/Quickstart+Windows#QuickstartWindows-32bitbinaries


これでMongoDBが動くところまでいったので、今度はPHPでMongoDBにアクセスしてみる。


MongoDB PHP ドライバの追加

http://php.plus-server.net/mongo.installation.html
ここを参考にして、対応するDLLをダウンロード。
自分の環境がわからない場合はphpinfo()で調べる。PHPバージョンはすぐわかりますね。VCはページ内検索すればそれっぽい数字が見つかるはず。あとは間違えてダウンロードしてもエラーが出て正しいバージョンを教えてくれるので、それをダウンロードし直せば大丈夫。


落としてきたファイルをphp\extの中にコピー。
php.iniに

extension=php_mongo.dll

と追加してApacheを再起動。


さて、PHPでmongoにアクセスするためには…。
http://php.net/manual/ja/book.mongo.php


よくわからないがとりあえずデータを挿入。

<?php
$mongo = new Mongo();
$db = $mongo->selectDB("test");
$col = $db->selectCollection("collection");
$col->insert(array("name"=>"MongoDB"));
$col->insert(array("path"=>"unnko"));
?>

データを取り出す際はこう書く。

<?php
$mongo = new Mongo();
$db = $mongo->selectDB("test");
$col = $db->selectCollection("collection");

$result = $col->find();
?>

$resultにはMongoCursorクラスオブジェクトが返ってきます。
MongoCursorオブジェクトが何なのか知らないと何もできないので、調べてみると
http://php.net/manual/ja/class.mongocursor.php
不思議なことが書いてありましたが、find()実行時にはまだデータベース接続されていないらしいです。
とにかく
MongoCursor::getNext();することで実データをもらえるようなので、とりあえずwhileで回してみる。

<?php
//…省略
//ここまでは上記と同じ

while($a = $result->getNext()) {
	print_r($a);
}
?>

これで中に入ってるデータを参照することができました。
なるほどなるほど。


RDBMSとは違い、テーブル(mongoではコレクション)を先に作っておく必要が無く、いきなりデータ(ドキュメント)をつっこんでいける。
これは簡単で良いですな。もちろん設計はちゃんとしておかないと、カオスなデータベースになりそうではありますが。


最後にphpMoAdminというのも入れておきましょうか。

phpMoAdmin

phpMyAdmin的なmongoDB版。
http://www.phpmoadmin.com/
1ファイルのみ。上記のDB接続までがうまくいっていればxamppの場合ならhtdocs以下に入れるだけで動く。
phpMyAdminとはUIが全く違いますが、今mongoにどんなデータが入ってるか一目瞭然なので、開発中はかなり使えそう。