管理しているサイトを少し高機能にするためAngularJS + node.js + express + mongoose + mongoDBの組み合わせでアプリケーション開発を行いたいと考えています。今回はそのmongoDB編で概要をまとめます。
尚、mongoDBのバージョンが2.6.3になりコマンドやコンフィグレーションの書き方が変わっています。
mongoDBのインストール
mongoDBをhomebrewでインストールします。
$ brew install mongodb
続いてインストール後環境設定を行います。環境設定ファイルは「~.homebrew/etc/mongo.config」にします。尚、mongodb2.6.2では記載方法が以前のバージョンとは異なりますので注意してください。またパラメータの説明に関しては
Install MongoDB on OS X — MongoDB Manual 2.6.3
を確認してください。
$ mkdir -p ~/.homebrew/etc/ $ vi ~/.homebrew/etc/mongo.conf storage: dbPath: ".homebrew/var/mongodb/" systemLog: destination: file path: ".homebrew/var/log/mongodb/mongo.log" quiet: true logAppend: true $
環境設定完了後、必要となるディレクトリはあらかじめ作成してください。
$ mkdir -p .homebrew/var/mongodb/ $ mkdir -p .homebrew/var/log/mongodb/
起動と停止
mongodbを起動するには次のコマンドを実行してください。
$ cd ~ $ mongod --config ~/.homebrew/etc/mongo.conf
別のターミナルからmongoクライアントを起動します。次のように接続されます。
$ mongo MongoDB shell version: 2.6.3 connecting to: test Server has startup warnings: 2014-07-15T21:16:06.807+0900 [initandlisten] 2014-07-15T21:16:06.807+0900 [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000 >
mongodbを停止するにはmongoクライアントから
> db.shutdownServer()
を実行するかCtrl+Cで停止させるかです。
mongodbの規則
mongoDBを触る前にルールを確認します。RDBとの呼び方の違いは次の表のようになっています。
RDB | mongoDB |
---|---|
データベース | データベース |
テーブル | コレクション |
レコード | ドキュメント |
次のコマンドを叩いてみます。
> show dbs admin (empty) local 0.078GB >
このlocalというデータベースは、mongodインスタンスの複製プロセスで用いられるデータを格納する専用のローカルデータベースで、インスタンス固有のデータを保存している領域です。このローカルデータベースは、レプリケーションでは見ることが出来ません。つまり、ローカルデータベース内のコレクションはレプリケートされないという意味です。
mongoクライアントを使ってみる
mongoクライアントのコマンドは
> help db.help() help on db methods db.mycoll.help() help on collection methods sh.help() sharding helpers rs.help() replica set helpers help admin administrative help help connect connecting to a db help help keys key shortcuts help misc misc things to know help mr mapreduce show dbs show database names show collections show collections in current database show users show users in current database show profile show most recent system.profile entries with time >= 1ms show logs show the accessible logger names show log [name] prints out the last segment of log in memory, 'global' is default use <db_name> set current database db.foo.find() list objects in collection foo db.foo.find( { a : 1 } ) list objects in foo where a == 1 it result of the last line evaluated; use to further iterate DBQuery.shellBatchSize = x set default number of items to display on shell exit quit the mongo shell >
dbと叩くと、カレントデータベースを表示し、show dbsでデータベースの一覧を表示します
> db admin > show dbs admin (empty) local 0.078GB >
新しくデータベースを作成します。create databaseに対応するものは無く、単にデータベースを使うと宣言すればいいだけです。
> use mydb switched to db mydb > db mydb >
これでデータベースが作成されました。このデータベースにデータを登録します。やはりcreate tableのようなコマンドはありません。いきなり使うという宣言をすればいいだけです。RDBのテーブル相当に対応するコレクションを作成し、そこにデータを登録します。
> j = { name : "mongo" } { "name" : "mongo" } > k = { x : 3 } { "x" : 3 } > db.testData.insert( j ) WriteResult({ "nInserted" : 1 }) > db.testData.insert( k ) WriteResult({ "nInserted" : 1 }) > show collections system.indexes testData > db.testData.find() { "_id" : ObjectId("53c5280540b018436bd5e82a"), "name" : "mongo" } { "_id" : ObjectId("53c5280640b018436bd5e82b"), "x" : 3 } > show dbs admin (empty) local 0.078GB mydb 0.078GB >
ここまでのまとめ
データベース「hoge」を作成するには
$ use hoge
コレクション「fuga」の作成はドキュメントの生成と同じタイミングで作成できます。
$ db.fuga.insert(json)