Mongoid的.includes()没有填充关系

时间:2015-09-04 18:12:02

标签: ruby mongodb mongoid

我正在使用Mongoid v4.0.2,我正在使用.includes()遇到一个有趣的问题。我有一张代表发票的记录,其中有一份收费清单。

我想查询单个发票,并在运行查询后填写费用。 According to the docs(搜索“Eager Loading”),我应该可以做类似的事情让Mongoid填充这些费用:

Invoice.includes(:charges).find_by({ _id: <objectId> })

当我收回记录时,费用仍然显示为ObjectId列表,删除.includes()似乎没有任何影响。我已经验证了我要查询的记录中存在的每个费用,所以我很困惑为什么他们没有填充。

我相信我已经正确设置了数据模型,但为了完整起见,我会将它们包含在这里。

class Invoice
  include Mongoid::Document
  has_many :charges

  field :status, type: String
  field :created, type: Time, default: -> { Time.now }
end

class Charge
  include Mongoid::Document

  field :created, type: Time, default: -> { Time.now }
  field :transactionId, type: String

  field :category, type: String
  field :amount, type: Float
  field :notes, type: String

  belongs_to :invoices
end

1 个答案:

答案 0 :(得分:-1)

如果您只找到一份文件,则没有理由使用includes。只需找到该文档,然后访问该关系。无论哪种方式,都将发出2个数据库请求。

includes提供性能提升的唯一时间是为多个文档加载多个关系时,因为Mongoid将执行的操作是加载查询的文档,遍历并收集应查询的所有ID。所有这些文档然后使用:id.in => ids功能将所有关系作为一个数据库调用进行查询。在你的情况下,没有必要这样做。