我是MongoID(&mongoDB)的新手,由于从参考集合中提取数据而导致性能出现问题。
class Accounting::Invoice
include Mongoid::Document
belongs_to :contact, :class_name => 'Contact'
End
class Contact
include Mongoid::Document
field :name, type: String
end
还使用宝石'kaminari-mongoid'进行分页。
我的查询的简化版本是:
@invoices = Accounting::Invoice.all.page(params[:page].to_i)
<% @invoices.each do |inv| %>
<% inv.contact.name %>
<% end %>
问题是当我显示数据时,为了简单地从Contact集合中获取名称,我必须重新连接到DB并为每个列表提取名称。我尝试使用$ lookup,但是当我使用kaminari进行分页时不起作用...
关于无需重新连接数据库就如何获取联系人姓名的任何建议?
谢谢
答案 0 :(得分:0)
您遇到的是N + 1 queries problem。通过将includes
用于关联,可以将查询数量减少到2。就您而言:
module.exports = {
};
应该可以解决问题。
当它返回Accounting::Invoice.includes(:contact)
.page(params[:page].to_i)
对象时,您可以链接适用于Arels的其他范围和方法。因此,如果您要对此使用ActiveRecord::Relation
,请按照以下步骤操作:
only