Love PG , Liquor & Music

プログラマー備忘録やお酒や音楽

RailsでMongoを使う(gem mongoの方)

Railsでmongo使おうと思ったらmongoidが結構主流で使われてます。
mongoidを使うとActive Record風にコレクションを扱えるのでふつうはこっちを使うのが一般的かと思います。

gem mongoidを使ってModelにField追加するってことはmigrationが不要になっただけであって、
mongo最大の利点であるスキーマレスを全く生かせてないんじゃ?なんて初心者特有の浅はかな考えが浮かんできました。

じゃあ、もっとmongoチックに実装してみようってことで’gem mongo’を使ってみることにしました。

mongo | RubyGems.org | your community gem host

gem mongoする

Gemfileに以下を追記します。bsonはmongo扱うときに必要になります。

gem 'mongo'
gem 'bson_ext'

mongoサーバーを作る

と書きましたが、作ってません。
めんどくさいのでMongo HQ上に一つサーバーを用意しました。
$ heroku addons:add mongohq で追加できます。追加したら環境変数MONGOHQ_URLみたいなのに接続情報が設定されます。Herokuすげー便利ですね。

MongoHQ | Add-ons | Heroku

app2XXXXXXから始まるのが自分のサーバーのIDになります。

f:id:gwaan_so:20140704002152j:plain

Adminタブから接続情報を確認できます。
アクセス権限や、ユーザーの削除追加もここからできます。

f:id:gwaan_so:20140704002559j:plain

Modelを実装する

こんな感じで実装します。

total.rb

ポイントは、require mongoすること。
あと、環境変数MONGOHQ_URLをパースしないとConnection.newに渡せないのでパースしてあげること。
正直ここが一番ハマりました。

initialize以外はコンソールでmongo使うような感じで好きなように実装してあげればOKです。

たぶんスキーマレスにするのはマスタ系とかは全然向いてないけど、
集計、統計なんかを動的に仕込みたいときとかだとすごい威力を発揮すると思いました。