Mac(macOS Sierra)でMongoDBを使ってみる

遅ればせながら,MongoDBを使ってみました.

これまで,PostgreSQLやMySQLなど,RDBしか触っていないので(あっ,Cassandraはちょっと触ったか),ドキュメント型DBであるMongoDBがどんなものかと触ったり調べたりしましたが,必ずしもRDBである必要のないシステムについては,MongoDBで作るのもアリかなと思った次第です.

とりあえず,brew一発で入れられるようです.

$ brew install mongodb

OpenSSLなども一緒に入れられるみたいです.

configは「/usr/local/etc」に,「mongod.conf」という名前でありますが,今回は特にいじりません.

サービスを起動してみます.

$ brew service start mongodb

それでは,早速MongoDBのクライアントを使ってみます.

とりあえず「sample」という名のデータベースを作成してみます.

> use sample
switched to db sample

SQLならcreate database sample;とやってからuse sample;などとするものなのに,MongoDBは,これだけでいいのです.

次に,SQLでいうところテーブル的扱いである「コレクション」を作成してみます.とりあえず「test」という名のコレクションを作成し,RDBでいうところの次のようなレコード(MongoDBでは「ドキュメント」と言います)を準備します.

id title price
1 MongoDB 1 100
2 MongoDB 2 200
> db.test.insert({_id:1, title:"MongoDB 1", price:100});
WriteResult({ "nInserted" : 1 })
> db.test.insert({_id:2, title:"MongoDB 2", price:200});
WriteResult({ "nInserted" : 1 })

そして,今挿入したtestコレクションの全ドキュメントを取得します.

> db.test.find()
{ "_id" : 1, "title" : "MongoDB 1", "price" : 100 }
{ "_id" : 2, "title" : "MongoDB 2", "price" : 200 }

いわゆるJSON形式のデータですね.

次に,idが2のドキュメントだけ表示してみます.

> db.test.find({_id:{$eq:2}});
{ "_id" : 2, "title" : "MongoDB 2", "price" : 200 }

次に,idが2のドキュメントについて,titleを「MongoDB UP」に変更してみます.

> db.test.update({_id:2}, {$set : {title: "MongoDB UP"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

結果を確認します.

> db.test.find()
{ "_id" : 1, "title" : "MongoDB 1", "price" : 100 }
{ "_id" : 2, "title" : "MongoDB UP", "price" : 200 }

なるほど,これでSQLでいうところのCRUD,SELECT,INSERT INTO,UPDATEを確認できました.削除(DELETE)は,removeコマンドのようです.

> exit

とりあえず,お試し終わり.

次に,Rubyからアクセスしてみます.MongoDBにバインドするためのgemは,「mongo」のようです.

いつものように,適当なフォルダ「sample」を作成して,bundlerにて環境をつくります.

$ mkdir sample
$ cd sample
$ bundle init
$ vi Gemfile

Gemfileの中身は次の通り,「bson_ext」というgemもインストールする必要があるようです.

gem "mongo"
gem "bson_ext"

Gemfileを書き換えたら,bundle installです.

$ bundle install —path vendor/bundle

今回はirbで確認してみます.

$ bundle exec irb

まずは,gem(mongodb)をrequireします.

irb> require 'mongo'
=> true

先ほど作成したデータベース「sample」のインスタンスを生成します.

irb> client=Mongo::Client.new(['127.0.0.1:27017'], :database=>'sample')
=> #

データベース「sample」の中のコレクションを表示してみます.

irb> puts client.database.collection_names
test
=> nil

次に,コレクション「test」の中のデータセットを取得します.取得したデータセットはオブジェクト「result」に格納します.

irb> result = client[:test].find()
=> #

取得したデータセット「result」をeachイテレータにより全ドキュメントをputsで表示してみます.

irb> result.each do |doc|
irb* puts doc
irb> end
{"_id"=>1.0, "title"=>"MongoDB 1", "price"=>100.0}
{"_id"=>2.0, "title"=>"MongoDB UP", "price"=>200.0}
=> #:each>

問題なさそうです.

irb> exit

とりあえず,RubyとMongoDBの連携を確認できたので,今日はこれでサービスを止めておきます.

$ brew services stop mongodb

また機会をみて触ってみます.

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中