Сортировка MongoDB с использованием алгоритма, который использует географию и дату - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь отсортировать результаты, используя вариант алгоритма хакерских новостей Пола Грэма. На самом деле это работает довольно хорошо, используя формулу: (оценка-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 }
])

Теоретически это работает, но я не думаю, что это как обычно решается проблема. Буду признателен за ваш отзыв!

...