У меня есть модель Person
, которая имеет много Comments
Сортировать по количеству поддокументов Mongoid
Как я мог сортировать коллекцию людей по количеству comments
Что-то вроде
Person.desc (:» комментарии.count ")
У меня есть модель Person
, которая имеет много Comments
Сортировать по количеству поддокументов Mongoid
Как я мог сортировать коллекцию людей по количеству comments
Что-то вроде
Person.desc (:» комментарии.count ")
Вы не можете работать с двумя коллекциями сразу, так что вам нужно что-то в 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
варианта belongs_to
добавит comments_count
поля для Person
, который будет содержать кэшированное количество комментариев.
После того, как у Вас есть свой кэш счетчик, вы можете сказать:
Person.desc('comments_count')
, чтобы получить сортировку.
Вам нужно будет инициализировать счетчики вручную, используя Person.reset_counters
или Person#reset_counters
, чтобы все началось.
Посмотрите на функции orderby в документах mongo: http://docs.mongodb.org/manual/reference/operator/meta/orderby/
Но в моем случае это не принадлежит_to, это встроено ..... –
Ваши комментарии встроены в ваших людей, чтобы ваши комментарии касались ваших людей? Я думаю, что кэш-счетчик по-прежнему является самым чистым подходом. –