按子文档数排序

Sort by number of subdocuments mongoid

我有一个模型 Person 有很多 Comments

如何按 comments

的数量对人员集合进行排序

类似于

Person.desc(:"comments.count")

查看 mongo 文档中的 orderby 功能:http://docs.mongodb.org/manual/reference/operator/meta/orderby/

您不能真正同时处理两个集合,因此您需要 Person 中的某些内容,您可以对其进行排序。通常的做法是使用一个计数器缓存来缓存每个Person中的评论数。你会有这样的东西:

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

belongs_to:counter_cache => true 选项将向 Person 添加一个 comments_count 字段,其中包含缓存的评论数。

一旦你有了计数器缓存,你可以说:

Person.desc('comments_count')

进行排序。

您需要使用 Person.reset_counters or Person#reset_counters 手动初始化计数器才能开始。