A little bit of everything

元・情報系大学院生の備忘録

RubyからMongoDBに接続して使用する方法

前提

以下が前提です。

  • mongod(MongoDBサーバ)が起動していること。
  • Rubyがインストールされていること。
  • gemがインストールされていること。

注意
MongoDBには、データベース、コレクション、ドキュメントという概念があります。よくわからない場合は、簡単にググってみることをおすすめしますが、簡単に説明するとこんな感じです。
f:id:yuukiyg:20190105194032j:plain

  • データベース:その名のとおりデータベースです。MySQLPostgreSQLでも、データベースの中にテーブル作って、その中にテーブルを作って…、と操作しますが、MongoDBでも一番外側の入れ物はデータベースです。
  • コレクション:テーブルに相当するものだと思って差し支えないと思います。1つのデータベースは複数のコレクションの集合です。
  • ドキュメント:実際のデータです。コレクションの中に格納します。よく使われるのはJSON形式のデータです。1つのコレクションは複数のドキュメントの集合です。

手順

それでは、実際にRubyからMongoDBに接続して使用する方法の手順を説明します。

1. MongoDBに、データベースとコレクションを作成する。

MongoDBのクライアントである、mongoを使用して、データベースとコレクションを先に作っておきます。手順は以下のとおりです。

  1. mongo に接続する。
    {MongoDBのインストールパス}/bin/mongo

  2. とりあえず、testdbという名前のDBを作成する。
    use testdb
    →コンソールに「switched to db testdb」と表示されれば、testdbが作成でき、かつtestdbに接続していることになります。

  3. testdbにtestcollectionというコレクションを作成する。
    db.createCollection("testcollection")
    →コンソールに「{ "ok" : 1 }」と表示されれば、tesdbにtestcollectionというコレクションが作成できたことになります。

  4. 作成したコレクションにドキュメントを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

実際に実行すると、以下のような結果になりました。 f:id:yuukiyg:20190105195733p:plain
Rubyの中でドキュメントをインサートした結果と、testcollectionに対してfindした結果が分かると思います。(最初に手動でインサートしておいたid:1のドキュメントもちゃんと見えますね)

もちろん、 mongo からも、Rubyでインサートした結果を確認することができます。
f:id:yuukiyg:20190105202047p:plain


その他

MongoDBのRuby向け公式ドキュメントはこちらにあります。 docs.mongodb.com