RoR MongoID查找不起作用?

时间:2018-08-28 08:42:48

标签: ruby-on-rails ruby mongodb mongoid

我是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进行分页时不起作用...

关于无需重新连接数据库就如何获取联系人姓名的任何建议?

谢谢

1 个答案:

答案 0 :(得分:0)

您遇到的是N + 1 queries problem。通过将includes用于关联,可以将查询数量减少到2。就您而言:

 module.exports = {

  }; 

应该可以解决问题。

当它返回Accounting::Invoice.includes(:contact) .page(params[:page].to_i) 对象时,您可以链接适用于Arels的其他范围和方法。因此,如果您要对此使用ActiveRecord::Relation,请按照以下步骤操作:

only