3. MongoDBのドキュメント操作

3. MongoDBのドキュメント操作

MongoDBのドキュメントに対してマップするモデルを作成し、Railsアプリケーションからドキュメントを操作してみましょう。リスト3のような内容のドキュメントを作るための、モデル・クラスを作成します。

リスト3: MongoDBのドキュメントの例

MongoDBは、スキーマレスのデータベースです。MongoDB側に、あらかじめ何かを定義することはありません。実際には、Railsのクラスで定義した内容に従って、構造が決定されます。

リスト3のドキュメントにマップするクラスを、Personとしましょう。Railsのルールに従い、MongoDBには、複数形のpeopleがコレクションとして定義されます。MongoDBでは、ドキュメントの集合をコレクションと呼びます。

mongoidを使うと、モデルを作成するジェネレータが、mongoidを使うように置き換えられています。このため、通常のモデル作成と同じく、"rails g model モデル名"で、クラス・ファイルのひな型を作成できます。作成したひな型を元に、リスト4のようなPersonクラスを記述します。

リスト4: Personクラス

マイグレーション・スクリプトは、作成する必要がありません。クラス内で定義したフィールドが、MongoDBに定義されます。

リスト3のドキュメントには、addressという入れ子になった構造があります。このため、このaddressにマップするAddressクラスも作成します(リスト5)。

リスト5: Addressクラス

作成したクラスを使用して、MongoDBを操作してみましょう。ここでは、Railsコンソールを使った例を、画面5に示します。

画面5: RailsからMongoDBの操作例

> person = Person.new(:first_name => "太郎")
=> #<person _id:="" created_at:="" first_name:="" last_name:="" updated_at:="">
> person.last_name = "日立"
=> "日立"
> person.build_address(:prefecture => "東京都", :city => "品川区", :street => "東品川4-12-7")
=> #
	<address 7="" _id:="" city:="" prefecture:="" street:="" zip_code:=""> 
> person.save
=> true
> person = Person.last
=> #<person 07:14:28="" 15="" _id:="" created_at:="" first_name:="" fri="" last_name:="" oct="" updated_at:="" utc="">
> person.address
=> #</person></address>
	<address 7="" _id:="" city:="" prefecture:="" street:="" zip_code:="">
> person.address.update_attributes!(:zip_code => "140-0002")
=> true</address>
	</person>

Active Recordと同じように操作できることが分かります。

最後に、MongoDBのコンソールを起動して、データがどのように保存されているのかを見てみましょう。

画面6: MongoDBコンソールでのデータ確認

# mongo
MongoDB shell version: 1.6.3
connecting to: test
> show dbs
admin
local
Railsアプリケーション名_development
> use Railsアプリケーション名_development
switched to db Railsアプリケーション名_development
> show collections
people
system.indexes
> db.people.find()
{ "_id" : ObjectId("4cb7ff3bc4eabd0ee4000005"), "address" : { "_id" : ObjectId("4cb7ff4bc4eabd0ee4000006"), "city" : "品川区", "prefecture" : "東京都", "street" : "東品川4-12-7", "zip_code" : "140-0002" }, "created_at" : "Fri Oct 15 2010 16:14:28 GMT+0900 (JST)", "first_name" : "太郎", "last_name" : "日立", "updated_at" : "Fri Oct 15 2010 16:14:28 GMT+0900 (JST)" }

addressが入れ子構造になっていることが分かります。

4. おわりに

ドキュメント指向データベースとしては、MongoDBのほかに、CouchDBと呼ぶオープン・ソースのデータベースがあります。オープンソース以外では、Amazon SimpleDBやLotus Notes/Dominoも、ドキュメント指向データベースです。なお、CouchDBは、Lotus Notes/Domino 6の開発を行っていたDamien Katz氏が開発したデータベースです。

ドキュメント指向データベースは、リレーショナル・データベースを扱ってきた人には、扱いにくいかも知れません。一方、Lotus Notes/Domino技術者にとっては、なじみやすいと思います。NoSQLデータベースは、その性能の良さばかりが注目されていますが、Lotus Notes/Domino上に作るような業務アプリケーションをRails上で実現する手段、としても使えるのではないでしょうか。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30