我要做的是找到帖子最多的用户。 User
和Post
为Mongoid::Document
相当于User.group(posts)
的ActiveRecord不起作用。我可以通过@user.posts.count
如何找到包含大多数帖子的用户,而不按帖子计数排序所有用户的数组?
答案 0 :(得分:2)
当您使用:all。时,Mongoid集合会响应数组函数。
User.all.max_by {|user| user.posts.count}
迭代所有用户,找到帖子最多的用户。
答案 1 :(得分:0)
如果你想要一种类似于SQL的方法,数据库可以完成所有工作,那么就没有。 MongoDB没有连接,也没有SQL。如果保持数据模型不变,则只能迭代所有用户,为它们获取后期计数然后排序。
但是您可以通过将帖子计数保存到用户文档中的字段并保持实际(在添加新帖子时递增等)来消除此N+1
查询模式。这称为“计数器缓存”,several plugins mongoid执行此操作。
拥有该缓存列后,您可以毫无问题地对其进行排序。