Найти самые последние и ближайшие сообщения, предел 20 - PullRequest
8 голосов
/ 14 мая 2011

Допустим, у меня есть группа постов (для фида, например, Twitter / Facebook / foursquare) в MongoDB, и у каждого поста есть местоположение и отметка времени .

Какой самый лучший способ получить самые последние и ближайшие сообщения, ограниченные 20 сообщениями?

Это также субъективный вопрос.Допустим, вы можете указать $maxDistance и максимальное время с этого момента (я не уверен, как бы вы сделали это иначе.).Как бы вы их указали?Вы бы сортировали по самым последним или ближайшим, или оставляли случайным, или сортировали другим способом?Какой алгоритм сортировки вы считаете наиболее интересным?

1 Ответ

2 голосов
/ 21 мая 2011

Я полагаю, что в конечном итоге вы получите список постов, которые имеют два дискретных измерения ранжирования, т.е.

{ age: 86400, distance: 1000 }
{ age: 172800, distance: 5000 }
{ age: 57600, distance: 20000 }
{ age: 288000, distance: 8000 }

Не имеет значения, какие единицы измерения, скажем, секунды и метры. Если вы хотите, чтобы оба влияли на ранжирование сортировки, то в итоге вы получаете алгоритм ранжирования, в простейшем случае что-то вроде этого:

rank = (C1 * age) + (C2 * distance)

Где C 1 и C 2 - это константы, которые можно настроить для настройки весов. Значения будут зависеть от того, какие единицы измерения вы используете, и какое влияние на ранжирование вы назначаете каждому измерению.

Другим вариантом может быть упорядочение сначала по совокупности времени, а затем по расстоянию, поэтому все сообщения за сегодняшний день упорядочены по расстоянию; с последующим заказанным вчера расстоянием и т. д. Или наоборот, упорядочение по диапазону расстояний, затем по возрасту, так что все в пределах (0-1000 м) упорядочено по возрасту; затем все в пределах (1001 - 2000 м) и т. д.

...