DB - MongoDB(1)
MongoDBについて
ドキュメント指向のNoSQLなDBMSです。スキーマが無いのでリレーショナルデータベースよりも楽ができます。
ウリはスケーリングの容易さとRDBの良さであるクエリや検索を充実させているところのようです。オープンソースのコードですが、企業向けのサポートや教育も行っているので、商用ベースで普及してきています。
http://www.mongodb.com/leading-nosql-database
JSONドキュメントを格納します。サーバサイトはJavaScriptで記述しますが、クライアントは各種言語のインタフェースが用意されています。(C++,C#,Java,Ruby,Perl,PHP,Python...)
インストール
$ sudo yum install mongo mongo-server
$ sudo service mongod start
対話型クライアント
デフォルトで使用するポートは 27017で、データベースは test に接続します
$ mongo
connecting to: test
> ... (> はmongoのプロンプト)
DBの切り替えはuseコマンドで行います
> use bibio_db
switched to db bibio_db
存在しないDBを指定した場合は新規に作成されるようです。(厳密にいうと初回レコード登録時。)
Create
コレクション(RDBでのテーブルに相当) booksにドキュメントを新規作成します
> db.books.save( { title: "A tiny tired article", author: "bibio"} )
ドキュメントはJavaScriptオブジェクト(JSON)で指定します。
Read
登録したデータを取得します。
> db.books.find( )
{ "_id" : ObjectId("5280b4478be7523bdaf36ee9"), "title" : "A tiny tired article", "author" : "bibio" }
_id はドキュメント毎にユニークに設定されるIDです。システムで自動的に設定されるので勝手にかえてはいけません。
find() にJSONオブジェクトを指定すると各種クエリが実行できます。
> db.books.find({author: "bibio"})
{ "_id" : ObjectId("5280b7588be7523bdaf36eeb"), "title" : "A tiny tired article", "author" : "bibio" }
{ "_id" : ObjectId("5280b8238be7523bdaf36eec"), "title" : "Second tired article", "author" : "bibio" }
find() はカーソル(DBObject)を返します。JavaScriptオブジェクトではありません。JavaScriptオブジェクトにアクセスするには next()やforEach()メソッドなどでアクセスします。
一方、fineOne() は find() と同じですが、マッチした最初のドキュメントを返します。
> db.books.findOne({author:"bibio"})
{
"_id" : ObjectId("5280b7588be7523bdaf36eeb"),
"title" : "A tiny tired article",
"author" : "bibio"
}
find() が返すイテレータには、limitやskip, sortなどが実装されています。メソッドチェインで次の通りに呼び出すことができます。(ActiveRecordと同じかんじ)
> db.books.find().skip(10).limit(10).sort({title: -1})
上の例では、titleを降順ソート(sort)し、最初の10件を飛ばし(skip)て、10件(limit)を取得します。limit と sort の順番にかかわらず、sortした結果からlimitで指定された値を出力します。