mongoid返回对象包含引用

时间:2013-01-02 15:15:26

标签: ruby-on-rails mongodb mongoid

所以我正在使用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?

1 个答案:

答案 0 :(得分:1)

这通常是在加入ActiveRecord时完成的。像这样:

 User.includes(:pictures).each do |user|

但是由于MongoDB不支持连接,因此无法一次性加载父文档及其引用的文档。如果这成为问题,您应该考虑在用户文档中嵌入图片(但是,这可能会导致更严重的性能损失)。

更新

Mongoid有一种方法eagerly load(搜索页面中的“Eager Loading”)引用的关系,但仍然会进行单独的查询。数据库不会在后续访问关系时被点击。