RoR MongoID 查找不起作用?
RoR MongoID Lookup doesn't work?
我是 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
也使用 gem 'kaminari-mongoid' 进行分页。
我的查询的简化版本是:
@invoices = Accounting::Invoice.all.page(params[:page].to_i)
<% @invoices.each do |inv| %>
<% inv.contact.name %>
<% end %>
问题是当我显示数据时,为了简单地从联系人集合中获取姓名,我必须重新连接到数据库并为每个列表提取姓名。我尝试使用 $lookup,但是当我使用 kaminari 进行分页时,它不起作用...
关于如何在不需要重新连接到数据库的情况下获取联系人姓名的任何建议?
谢谢
您遇到的是N + 1 queries problem. You can reduce the number of queries to 2 by using includes
协会。在你的情况下:
Accounting::Invoice.includes(:contact)
.page(params[:page].to_i)
应该可以解决问题。
因为它 returns ActiveRecord::Relation
对象,您可以链接适用于 Arels 的其他范围和方法。所以,如果你想使用 only
,请按以下方式操作:
Accounting::Invoice.includes(:contact)
.only(<list_of_attributes>)
.page(params[:page].to_i)
我是 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
也使用 gem 'kaminari-mongoid' 进行分页。
我的查询的简化版本是:
@invoices = Accounting::Invoice.all.page(params[:page].to_i)
<% @invoices.each do |inv| %>
<% inv.contact.name %>
<% end %>
问题是当我显示数据时,为了简单地从联系人集合中获取姓名,我必须重新连接到数据库并为每个列表提取姓名。我尝试使用 $lookup,但是当我使用 kaminari 进行分页时,它不起作用...
关于如何在不需要重新连接到数据库的情况下获取联系人姓名的任何建议?
谢谢
您遇到的是N + 1 queries problem. You can reduce the number of queries to 2 by using includes
协会。在你的情况下:
Accounting::Invoice.includes(:contact)
.page(params[:page].to_i)
应该可以解决问题。
因为它 returns ActiveRecord::Relation
对象,您可以链接适用于 Arels 的其他范围和方法。所以,如果你想使用 only
,请按以下方式操作:
Accounting::Invoice.includes(:contact)
.only(<list_of_attributes>)
.page(params[:page].to_i)