0

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

那么,如何返回一个包含它的引用的对象(用户),这样我就不需要再次访问数据库了?

4

1 回答 1

1

这通常通过加入 ActiveRecord 来完成。像这样的东西:

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

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

更新

Mongoid 有一种方法可以快速加载(在页面中搜索“Eager Loading”)引用的关系,但仍然会进行单独的查询。数据库不会在关系的后续访问中受到影响。

于 2013-01-02T15:17:34.827 回答