Я пытаюсь отсортировать результаты, используя вариант алгоритма хакерских новостей Пола Грэма. На самом деле это работает довольно хорошо, используя формулу: (оценка-1) / ((t + 2) ^ 1.8)
t = количество дней с момента публикации сообщения
оценка = чем меньше расстояние между вами и плакатом, тем выше оценка (например, пользователи, разместившие сообщение в пределах 5 км, могут получить 50 баллов, а те, кто находится на расстоянии 25 км, могут получить оценку 5).
Я пытаюсь найти способ сделать эту работу более эффективной с помощью MongoDB, но пока не нашел решения.
Я могу агрегировать результаты и сортировать по местоположению , а затем применить алгоритм против этого, но я просто не думаю, что это самый эффективный способ сортировки, если у вас есть 100 тысяч сообщений.
db.posts.aggregate([
{ $geoNear: {
near: {
type: "Point",
coordinates: [-123.1207, 49.2827]
},
distanceField: "dist.calculated",
includeLocs: "dist.location",
spherical: true
}
},
{ ... sort using dist.calculated and date_posted }
])
Теоретически это работает, но я не думаю, что это как обычно решается проблема. Буду признателен за ваш отзыв!