たとえば、2 つのドキュメントがあります。
class Task
include Mongoid::Document
field :name, type: String
belongs_to :person
end
と
class Person
include Mongoid::Document
field :name, type: String
has_one :stage
end
コントローラーにメソッドがあります
def index
tasks = Task.all
render :json => tasks.to_json(:include => :person)
end
生成されたクエリを見ると、タスクごとに人を検索していることがわかります (現在 3 つのタスクがあります)
MOPED: 127.0.0.1:27017 QUERY database=pipeline_development collection=tasks selector={} flags=[:slave_ok] limit=0 skip=0 fields=nil (0.3619ms)
MOPED: 127.0.0.1:27017 QUERY database=pipeline_development collection=people selector={"$query"=>{"_id"=>"50f12eb2cce8b43b05000001"}, "$orderby"=>{:_id=>1}} flags=[:slave_ok] limit=-1 skip=0 fields=nil (0.1998ms)
MOPED: 127.0.0.1:27017 QUERY database=pipeline_development collection=people selector={"$query"=>{"_id"=>"50f12eb2cce8b43b05000001"}, "$orderby"=>{:_id=>1}} flags=[:slave_ok] limit=-1 skip=0 fields=nil (0.3881ms)
MOPED: 127.0.0.1:27017 QUERY database=pipeline_development collection=people selector={"$query"=>{"_id"=>"50f12eb2cce8b43b05000001"}, "$orderby"=>{:_id=>1}} flags=[:slave_ok] limit=-1 skip=0 fields=nil (0.2272ms)
これは実際には加算され (データベース内の各ルックアップの時間は実際には 0.3 ミリ秒ではなく 25 ミリ秒です)、不当な速度低下につながる可能性があります。
これを修正する方法について何か提案はありますか?
編集
熱心に読み込んでみた
def index
tasks = Task.all.includes(:person)
render :json => tasks.to_json(:include => :person)
end
しかし、それは何も変わらないようです