Node.jsとSocket.IO、MongoDBを使用して、Webページの更新内容がリアルタイムにView画面に反映されるサイトを作ってみた
前回はNode.jsでWebアプリを作成するために、ExpressやSocket.IOを使用したデモを基に説明した。今回はWebアプリのデータを保存するために必要なデータベースとしてMongoDBの使い方を説明していく。今回の記事でも後半でMongoDBを使った簡単なデモを用意しているので試してみてほしい。
MongoDBとは、ドキュメント指向のデータベースでNode.jsと相性がいいため、Node.jsとともに注目されている。Node.jsで実装したREABLOエンジンを使ったTech Releaseでも記事のデータベースとしてMongoDBを使用している。MongoDBもSocket.IOと同じく、手軽に使用することができるので、使い方を覚えておこう。
以下のURLからまずはMongoDBをダウンロードしよう。
http://www.mongodb.org/downloads
ダウンロードしてファイルを解凍したら、bin以下にパスを通しておくことをお勧めする。
MongoDBのコマンドを試してみるだけの場合は、
の「TRY IT OUT」の項目を選択すれば、ブラウザ上でMongoDBのコマンドを試すことが可能だ。
binフォルダの中の「mongod」がサーバの役割をする。
MongoDBは指定したフォルダにファイルとしてデータベースデータを作成するので、MongoDBを起動する前にC:\data\db以下に空のフォルダを作成しよう。OSによってフォルダのパスが違うので注意しよう。
生成した後にmongodのコマンドでMongoDBサーバが起動する。
$ mongod
自分でデータベースの保存場所を指定したい場合は「--dbpath」を引数に入れて実行する。
$ mongod --dbpath C:\data\mongo
mongodでサーバを起動したら次はコンソールからMongoDBのデータを触ってみよう。「mongo」コマンドがそのコマンドだ。
$ mongo MongoDB shell version: 2.0.4 connecting to: test >
mongoは対話型でMongoDBのコマンドを実行できる。
試しにfooというデータベースを作成し、オブジェクトを生成してみよう。
>use foo switched to db foo >db.foo.save({text:"hello mongodb.",type:"message"}) >db.foo.save({text:"hoge",type:"message"}) >db.foo.find() { "_id" : ObjectId("50c598209cfdc77a5ec29734"), "text" : "hello mongodb." , type: "message"} { "_id" : ObjectId("50c59d6c9cfdc77a5ec29735"), "text" : "hoge", type: "message" }
save()が、データの挿入になる。挿入する値は、JSONで記述する。save()でデータを保存すると自動的に_idという識別用のパラメータが付く。要素に_idがあるオブジェクトをsave()した場合は、データが更新される。find()が値を取得する関数で、引数なしで呼び出した場合は要素すべてが取得できる。
mongoシェルはJavaScriptインタプリタであるため、JavaScriptの構文を使用できる。for文やwhile文、クロージャ、関数定義などが使えるので、複雑な処理などはJavaScriptを使用して実装することができる。先ほど使用した、find()やsave()もJavaScriptの関数になる。
以下の例ではxの値が0から9までのデータをfor文でfooに挿入し、find()文で、2で割り切れる値のみをフィルタリングして取得している。
> for(var i=0;i<10;i++){ db.foo.save({x:i}); } > db.foo.find({$where:function(){return this.x %2 == 0;}}) { "_id" : ObjectId("50c800ad30d36c061f9e07b7"), "x" : 0 } { "_id" : ObjectId("50c800ad30d36c061f9e07b9"), "x" : 2 } { "_id" : ObjectId("50c800ad30d36c061f9e07bb"), "x" : 4 } { "_id" : ObjectId("50c800ad30d36c061f9e07bd"), "x" : 6 } { "_id" : ObjectId("50c800ad30d36c061f9e07bf"), "x" : 8 }
詳しいリファレンスは公式の
http://docs.mongodb.org/manual/reference/javascript/
に載っているので、一通り見ておくのがいいだろう。今回は紹介しなかった、findOne()やupdate()、remove()などの必要な関数も説明されている。
Copyright © ITmedia, Inc. All Rights Reserved.