所以我正在使用Mongoid,我希望通过它的参考返回一个对象。让我说我有:
class User
include Mongoid::Document
has_many :pictures
end
class Picture
include Mongoid::Document
belongs_to :user
end
问题在于此代码:
users = User.all #goes to the db
users.each do |user|
pic = user.pictures.first # <--- bad! hitting the db again here
end
那么,如何返回包含它的refference的对象(用户)所以我不需要再次点击db?
答案 0 :(得分:1)
这通常是在加入ActiveRecord时完成的。像这样:
User.includes(:pictures).each do |user|
但是由于MongoDB不支持连接,因此无法一次性加载父文档及其引用的文档。如果这成为问题,您应该考虑在用户文档中嵌入图片(但是,这可能会导致更严重的性能损失)。
Mongoid有一种方法eagerly load(搜索页面中的“Eager Loading”)引用的关系,但仍然会进行单独的查询。数据库不会在后续访问关系时被点击。