RubyからMongoDBに接続して使用する方法
前提
以下が前提です。
- mongod(MongoDBサーバ)が起動していること。
- Rubyがインストールされていること。
- gemがインストールされていること。
注意
MongoDBには、データベース、コレクション、ドキュメントという概念があります。よくわからない場合は、簡単にググってみることをおすすめしますが、簡単に説明するとこんな感じです。
- データベース:その名のとおりデータベースです。MySQLやPostgreSQLでも、データベースの中にテーブル作って、その中にテーブルを作って…、と操作しますが、MongoDBでも一番外側の入れ物はデータベースです。
- コレクション:テーブルに相当するものだと思って差し支えないと思います。1つのデータベースは複数のコレクションの集合です。
- ドキュメント:実際のデータです。コレクションの中に格納します。よく使われるのはJSON形式のデータです。1つのコレクションは複数のドキュメントの集合です。
手順
それでは、実際にRubyからMongoDBに接続して使用する方法の手順を説明します。
1. MongoDBに、データベースとコレクションを作成する。
MongoDBのクライアントである、mongoを使用して、データベースとコレクションを先に作っておきます。手順は以下のとおりです。
mongo に接続する。
{MongoDBのインストールパス}/bin/mongo
とりあえず、testdbという名前のDBを作成する。
use testdb
→コンソールに「switched to db testdb」と表示されれば、testdbが作成でき、かつtestdbに接続していることになります。testdbにtestcollectionというコレクションを作成する。
db.createCollection("testcollection")
→コンソールに「{ "ok" : 1 }」と表示されれば、tesdbにtestcollectionというコレクションが作成できたことになります。作成したコレクションにドキュメントを1件インサートしてみる。
db.testcollection.insertOne({_id:1, name:"Yuuki", message:"Happy New Year!"})
2. MongoDBのRubyドライバをインストールする。
以下のコマンドを実行し、MongoDBのRubyドライバをインストールします。
gem install mongo
3. Rubyのコードを書く
MongoDBに接続し、上記で作ったtestdbのtestcollectionに対してドキュメントをインサートしたうえで、コレクションの中身を確認するコードを書いてみます。
require 'rubygems' require 'mongo' # ローカルホストの27017ポートで動いているmongodに接続する db = Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'testdb') # コレクションを取得する collection = db[:testcollection] # インサートするドキュメントを作る document = {_id: 12345, name: "test name", message: "hello"} # insert_one(ドキュメントを1行挿入するメソッド)を使ってインサートする collection.insert_one(document) # find文を打った結果を参照する(↑でインサートしたドキュメントが見られるはず) result = collection.find() result.each do |doc| puts doc end
実際に実行すると、以下のような結果になりました。
Rubyの中でドキュメントをインサートした結果と、testcollectionに対してfindした結果が分かると思います。(最初に手動でインサートしておいたid:1のドキュメントもちゃんと見えますね)
もちろん、 mongo からも、Rubyでインサートした結果を確認することができます。
その他
MongoDBのRuby向け公式ドキュメントはこちらにあります。 docs.mongodb.com