【发布时间】:2021-02-17 23:24:01
【问题描述】:
所以我有两个看起来像这样的类
class Branch
include MongoMapper::Document
many :builds
end
class Build
include MongoMapper::Document
belongs_to :branch
end
如果我们想从Build 类访问Branch 数据。我可以像下面那样做
builds = Build.where(___)
builds.each do |build|
puts "#{build.branch.name} build number #{build.number}"
end
但这会触发警报,导致 N+1 查询,因为它进行了太多独立的数据库查询。那么解决方案是使用如下所示的 Eager Load
builds = Build.where(____).includes(:branches)
builds.each do |build|
puts "#{build.branch.name} build number #{build.number}"
end
好吧,当我查看他们的文档时,MongoMapper 中不提供急切加载或.includes()(我希望我错了)。但它在 MongoId 中可用。但是,我暂时不打算从 MongoMapper 更改为 MongoId。你知道这件事的转机吗?这也许可以减少查询。
【问题讨论】:
标签: ruby-on-rails ruby mongodb eager-loading mongomapper