Как сделать сортировку постов по рейтенгу в mongoid?

Есть модель Post.rb

Нужно сделать сортировку по rating

class Post
  field :vote_count, type: Integer
  field :published_at, type: Time

  def rating
    (vote_count -1) / (( hours_past + 2) ** 1.5)
  end

  def hours_past
    (Time.now - self.published_at)/3600
  end
end
  • Вопрос задан
  • 2378 просмотров
Решения вопроса 1
Able1991
@Able1991
Пишу на рельсах
Причем тут монгоид если поле по которому нужно сортировать не хранится в базе, с такой логикой ипользуйте обысную сортировку массива
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Звиняйте, но у вас тут сразу несколько ошибок:
1. В начальных условиях рейтинг отрицательный что несколько странно. Обычно изначальный рейтинг должен быть 0. -1 там ошибка - лучше просто запретить голосовать за себя.
2. При таком подходе вам нужны aggregations. Только я бы в таком случае как - минимум ограничивал поиск по дате, и по количеству голосов.

Причина в том что тут нет никакой магии - агрегации достаточно тяжелы в расчётах, и копать ими ради рейтинга несколько сотен тысяч топиков с 10-летней давностью не имеет смысла.
Смотрите пример тут: stackoverflow.com/questions/20585135/mongodb-get-a...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы