MEANスタックを用いたWebアプリの開発方法について紹介していく連載。今回は、ドキュメント指向データベース「MongoDB」の概要とセットアップの仕方、コマンドで基本的なCRUD操作をする方法、MongoDB用モデリングツール「Mongoose」の使い方と、Node.jsからMongooseモジュールでMongoDBを操作する方法などについて。
前回の、『Node.jsのMVCフレームワーク「Express」における静的ファイル、ルーティング定義、セッション管理、エラー処理』では、サーバ側のMVCフレームワーク「Express」のいろいろな機能について紹介しました。
今回は、MEANスタックの「M」の部分、MongoDBについての概要と、Node.jsからMongoDBへアクセスする方法について解説します。
なお、本記事を見て実際にサンプルを動かしたい場合、以前の連載記事(第1回、第2回)を見て環境を作成しておきましょう。
第1回の記事「LAMPに代わる構成として注目のMEANスタックの基礎知識とインストール、ひな型作成」でも少し触れましたが、MEANスタックアプリにおけるデータベースといえば、MongoDBです。
MongoDBは、MySQLやOracleのようなRDB(Relational DataBase)とは違い、NoSQLに分類されるデータベースで、「ドキュメント指向データベース」と呼ばれています。
MongoDBは「ドキュメント」と呼ばれるJSONのようなデータ形式を用いて、その集合を「コレクション」として扱います。そして、コレクションを扱うためにはクエリを発行して操作します。
MongoDBの特徴の一つに、「固定スキーマを持たない」ということがあります。そのため、テーブルの結合処理は効率よく行うことはできませんが(不可能ではない)、CRUDのクエリは高速に動作します。設計の際には、その辺りを考慮して行う必要があるでしょう。
また、MongoDBはスケーラビリティにも優れており、シャーディング機能によってクラスターの構築も可能です。
RDBとの違いで少し注意しなければならないのは、トランザクションの機能がないということでしょうか。MongoDBでトランザクションを実現したい場合、次の二つの方法があります。
一つ目はアトミックな操作を使用する方法です。MongoDBではドキュメントへのupdate操作のみ、アトミックが保証されるので、これを利用してトランザクションを実現します。
二つ目はトランザクションの状態を自分で管理する方法です。ドキュメントの中にトランザクションの状態を格納して、手動でトランザクションの状態を管理します。
MongoDBでトランザクションを実現するための詳細な解説は、下記リンクをご確認ください。
次に、MongoDBのセットアップをしましょう。
MongoDB公式のダウンロードページから自分のプラットフォームに合ったファイルをダウンロードし、インストーラーの指示に従ってインストールします。
Macの場合、Homebrewを使用してインストールすることも可能です。
% brew update % brew install mongodb
インストール時に指示されますが、ログイン時のMongoDB起動のため、デーモンの登録とサービスのロードを行います。
% ln -sfv /usr/local/opt/mongodb/*.plist ~/Library/LaunchAgents % launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
mongoコマンドでインストールできたか確認してみましょう。インストールしたMongoDBのバージョンが表示されればOKです。
% mongo -version MongoDB shell version: 3.0.3
ちなみにMacの場合、MongoDBを停止する際には、psコマンドでプロセス番号を確認し、killコマンドで停止させます。
% ps ax | grep mongod 1234 ?? S 27:04.92 /usr/local/opt/mongodb・・・ % kill -9 1234
MongoDBにアクセスしてみましょう。MongoDBは、「MongoDB shell」という対話型コンソールを持っており、すぐに動きを確認できます。
% mongo MongoDB shell version: 3.0.3 connecting to: test >
MongoDBでは内部にJavaScriptエンジンを持っているため、コンソールでJavaScriptを使うこともできます。
> for(var i = 0; i < 3 ; i++) { print("i=" + i); } i=0 i=1 i=2
詳細は、下記リンクを参照してください。
Copyright © ITmedia, Inc. All Rights Reserved.