Tech Sketch Bucket of Technical Chips by TIS Inc.

RubyのODM Mongoidを使いこなす②

Pocket

この記事はeXcale Developer's Blogから移転されたものです。


eXcale開発チームの泉谷(@syguer)です。
今回は以前に紹介したRubyのODMであるMongoidについて、データの更新やDBアクセスについての Tips を紹介します。

 

 


eXcaleでは期間限定でサインアップキャンペーン実施中です。
まだ登録されていない方は、この機会にアプリ公開の手軽さを体験してみてください。
サインアップはこちらから。
キャンペーン内容についてはこちらを参照してください。

 


データの更新について

Mongoidでは値の更新について複数の手段を選ぶことができます。

・save
値が更新されたインスタンスを上書き保存します。

・update_attributes
インスタンスのフィールドをatomicに更新します。

・inc
数値をatomicにインクリメントします。数値を更新したい場合に便利

値を負の値にすることで減らすこともできます。

・update、updateAll
クエリの検索結果に対して更新します。

・find_and_modify
Mongoidでもmongoの機能であるfind_and_modifyを使うことができます。
クエリの検索結果に対してatomicに更新をすることができます。


モデルの中に別なモデルがあるデータ構造を扱う

あるModelがあるModelに含まれている様な関係を持つ場合どうすればよいかを紹介します。

例えば、クラブ(サークル)を表す以下のようなデータ構造を考えてみます。

クラブはシンプルにクラブ名とメンバーのリストを持ちます。
このとき、以下のようにするとうまく扱うことができます。

このようにembeds_many、embedded_inを使うことで入れ子のデータ構造を扱うことができます。
上記の例の他にもmemberを削除しないとclubを削除できないようにするといった制約を付けたりすることもできます。
公式ドキュメントで色々なパターンの使い方が説明されているので参照してみてください。


複数のデータベースを使う

1つのデータベースだけではなく、複数のデータベースを扱いたい場合があると思います。
そういう場合は以下のようにします。

まず、設定ファイル(mongoid.yml)のsessionsの所に複数のデータベースの情報を記載します。

これでdefaultとsecondaryという二つのsessionが定義されました。
次にModelを定義しているクラスでstore_inを使ってどのsessionを扱うか
明示的に指定します。(指定しない場合はdefaultが使われます)

このようにModel側でsessionを指定することでそのsessionが使われるようになります。


最後に

いかがだったでしょうか。
Mongoidを使えば簡単にMongoDBのデータをオブジェクトとして扱う事ができます。
他にも便利なクエリが多数用意されていますので、公式ドキュメントを参照してみてください。

エンジニア採用中!私たちと一緒に働いてみませんか?