假设我在MongoDB中有一堆帖子(用于提要,比如Twitter / Facebook / foursquare提要),每个帖子都有location&一个timestamp。
获得最新版本的最佳方法是什么?最近的帖子,限于20个帖子?
这也是一个主观问题。假设你可以指定$maxDistance
和从现在开始的最长时间(我不知道你会怎么做)。你会如何指定它们?您会按最近或最近的方式排序,还是保持随机排序或以其他方式排序?您认为哪种排序算法最有趣?
答案 0 :(得分:2)
我想你最终会得到一个有两个不连续排名维度的帖子列表,即:
{ 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 - 1000m);其次是(1001 - 2000m),等等。