2

たとえば、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

しかし、それは何も変わらないようです

4

0 に答える 0