按子文档的数量排序mongoid

时间:2015-04-26 10:26:09

标签: mongodb mongoid

我的模型Person有很多Comments

如何按comments

的数量对人物收集进行排序

这样的东西
  

Person.desc(: “comments.count”)

2 个答案:

答案 0 :(得分:1)

你不能同时使用两个集合,所以你需要Person中的某些东西可以排序。通常的方法是使用计数器缓存来缓存每个Person中的注释数。你会有这样的事情:

class Person
  include Mongoid::Document
  has_many :comments
end
class Comment
  include Mongoid::Document
  belongs_to :person, :counter_cache => true
end

:counter_cache => true的{​​{1}}选项会向belongs_to添加comments_count字段,其中包含缓存的评论数。

获得计数器缓存后,您可以说:

Person

进行排序。

您需要使用Person.reset_countersPerson#reset_counters手动初始化计数器,以便开始使用。

答案 1 :(得分:-1)