我正在使用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
答案 0 :(得分:-1)
如果您只找到一份文件,则没有理由使用includes
。只需找到该文档,然后访问该关系。无论哪种方式,都将发出2个数据库请求。
includes
提供性能提升的唯一时间是为多个文档加载多个关系时,因为Mongoid将执行的操作是加载查询的文档,遍历并收集应查询的所有ID。所有这些文档然后使用:id.in => ids
功能将所有关系作为一个数据库调用进行查询。在你的情况下,没有必要这样做。