MongoDBは、SQLデータベースに近いNoSQLです。ドキュメントデータベース、キー・バリュー型データストア(key-valueストア)、リレーショナルデータベース(RDB)の良いとこ取りを目指しています。使い勝手もRDBに近いといえます。

MongoDBのデータベース構造

図1●MongoDBの用語
図1●MongoDBの用語
[画像のクリックで拡大表示]

 MongoDBは、データベース、コレクション、ドキュメントという階層構造になっています(図1)。コレクションはRDBでは、テーブルに相当するものです。

 RDBと違い、MongoDBではスキーマが不要です。RDBではテーブルの各行(レコード)が、どのようなデータをどの順に持っているかを最初に定義する必要があります。また、各レコードはスキーマで定義された共通の構造を持っています。

 ところが、MongoDBのコレクションはスキーマレスであり、レコードに相当するドキュメントというデータを保持していますが、一つひとつのドキュメントは特に共通の構造を持つ必要がありません。

図2●MongoDBはスキーマレス
図2●MongoDBはスキーマレス
[画像のクリックで拡大表示]

 このため、データベースに登録するデータの構成が変化しても、柔軟に対応できます(図2)。

 ここではMongoDBをUbuntu 9.10にインストールして使ってみます。インストールに先立ち、Ubuntuを「$ sudoapt-get update」のように最新に更新しておいてください。

 MongoDBのインストールは難しくありません。MongoDB公式サイトのダウンロードページでバイナリをダウンロードできます。

 上記のサイトにアクセスして、Linuxの「download」をクリックしてMongoDBのバイナリファイルをダウンロード、展開します。

$ tar mongodb-linux-i686-1.2.4.
tgz
$ cd mongodb-linux-i686-1.2.4/
bin

 「mongod」というのがMongoDBデータベースの本体です。このコマンドの引数として、データベースの格納場所へのパスと、mongodが接続を受け付けるポート番号を指定します。

$ sudo mkdir /var/db
$ sudo mkdir /var/db/mongo
とデータベース格納場所を作っておき、次のように起動します。
$ sudo ./mongod --dbpath /var/db/mongo

 正常に起動したら「waiting for connections on port 27017」とメッセージが出ます(写真1)。

写真1●MongoDBの起動メッセージ
写真1●MongoDBの起動メッセージ

mongoコマンドの使い方

 MongoDBを簡単に操作するためには、クライアント側のmongoコマンドを使います。MySQLサーバーを操作する「mysqlコマンド」と同じようなものです。

 データベースサーバーのポート番号を明示的に指定した場合にはmongoコマンドにも--portオプションを指定します。

 別の端末から、MongoDBを展開したディレクトリ内のbinディレクトリ内に入り、

$ cd mongodb-linux-i686-1.2.4/bin
次のようにmongoを起動します。

$ ./mongo
MongoDB shell version: 1.3.1
url: test
connecting to: test
type "exit" to exit
type "help" for help
>

 これでmongoコマンドがmongoDBに接続できました。「>」というのがmongoコマンドのプロンプトです。ここから抜けるには、「exit」を入力します。

 mongoコマンドは対話的にデータベースを操作できるので、学習に大変役立ちます。データベースをちょっと除いたり、修正したりするのにとても便利です。

 mongoコマンドは行編集機能を持たないので、行編集機能を提供する「rlwrap」コマンドをインストールして使えばもっと便利になります。それには、

> exit
bye
$ sudo apt-get install rlwrap
# rlwrap mongo

のように実行します。