Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我要做的是找到帖子最多的用户。User并且Post是Mongoid::Document
User
Post
Mongoid::Document
ActiveRecord 等效项User.group(posts)不起作用。我可以访问用户拥有的帖子数量@user.posts.count
User.group(posts)
@user.posts.count
如何在不按帖子数对所有用户的数组进行排序的情况下找到帖子最多的用户?
当您使用 :all 时,Mongoid 集合会响应 Array 函数。
User.all.max_by {|user| user.posts.count}
这会遍历所有用户并找到帖子最多的用户。
如果您想要一种类似于 SQL 的方式,由数据库完成所有工作,那么没有。MongoDB 没有连接,也没有 SQL。如果您保持数据模型不变,则只能迭代所有用户,为他们获取帖子计数,然后进行排序。
但是您可以N+1通过将帖子计数保存到用户文档中的字段并保持其实际(在添加新帖子时增加等)来消除这种查询模式。这称为“计数器缓存”,有几个mongoid插件可以做到这一点。
N+1
拥有该缓存列后,您可以毫无问题地对其进行排序。