albatrosary's blog

UI/UXとエンタープライズシステム

SPA開発のために 〜 MongoDB編 〜

管理しているサイトを少し高機能にするためAngularJS + node.js + express + mongoose + mongoDBの組み合わせでアプリケーション開発を行いたいと考えています。今回はそのmongoDB編で概要をまとめます。

尚、mongoDBのバージョンが2.6.3になりコマンドやコンフィグレーションの書き方が変わっています。

mongoDBのインストール

f:id:albatrosary:20140715205820p:plain

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との呼び方の違いは次の表のようになっています。

RDBmongoDB
データベース データベース
テーブル コレクション
レコード ドキュメント

次のコマンドを叩いてみます。

> 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)