Rails3 対応 MongoDB ORM、Mongoid 詳解―インデックス
index マクロを使うことにより、ドキュメントにインデックスを定義することができます。:unique オプションをつけると、ユニークなインデックスを構築できます。オプションは必須ではありません。
class Person include Mongoid::Document field :ssn index :ssn, :unique => true end
以下のようにして、エンベッドされたドキュメントにもインデックスを定義することができます。
class Person include Mongoid::Document embeds_many :addresses index "addresses.street" end
複数フィールドに対してもインデックスを定義することができます。また、ソート順も定義できます。
include Mongoid::Document field :first_name field :last_name index( [ [ :first_name, Mongo::ASCENDING ], [ :last_name, Mongo::ASCENDING ] ], :unique => true ) end
インデックスは、ある程度時間がかかる場合、バックグラウンドで実行することもできます:
class Person include Mongoid::Document field :ssn index :ssn, :unique => true, :background => true end
位置空間インデックスを定義する場合は、必ず、フィールドを配列としてください。
class Person include Mongoid::Document field :location, :type => Array index [[ :location, Mongo::GEO2D ]], :min => 200, :max => 200 end
リレーショナルな関連で、外部キーに対して、インデックスを定義することができます。
class Comment include Mongoid::Document referenced_in :post, :inverse_of => :comments, :index => true references_many \ :users, :stored_as => :array, :inverse_of => :comments, :index => true end
データベースにインデックスを作成したい時は、Rake タスクを呼び出してください:
rake db:create_indexes
モデルクラスがロードされたときに、自動的にインデックスを作成したい場合は、mongoid.yml のコンフィギュレーションオプションで設定することができます。ただし、プロダクション環境では推奨しません。
defaults: &defaults autocreate_indexes: true
インデックスは以上です。