2011-05-14 68 views
8

假设我在MongoDB中有一堆帖子(对于feed,比如Twitter/Facebook/foursquare feed),并且每个帖子都有一个location & a timestamp查找最近和最接近的帖子,限制20

什么是最近的&最近的帖子的最佳方式,限于20个帖子?

这也是一个主观问题。假设您可以指定$maxDistance以及从现在开始的最长时间(我不确定您将如何执行此操作)。你会如何指定它们?你会按最近或最接近的方式排序,或者将它保持随机或按其他方式排序?你认为哪种排序算法最有趣?

+0

您能否提供不起作用的示例查询?这将为那些应该回答的人节省一些研究时间。 – sanmai 2011-05-26 02:35:48

回答

2

我想你最终落得与具有两个独立的排名方面的职位名单,即:

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

并不重要单位是什么,可以说秒米。如果你想既影响排序排名,那么你最终有一个排序算法,在其最简单的是这样的:

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

其中C 和C 是你可以调整来调整常数权重。值将取决于您使用的单位,以及您分配给每个维度的排名影响。

另一个选项可能是首先按时间聚合然后按距离排序,所以今天的所有帖子按距离排序;其次是昨天按距离排序,依此类推。反之亦然,按照距离范围排序,然后按年龄排序,所有范围内(0 - 1000米)按年龄排序;其次是所有范围内(1001 - 2000米),依此类推。

+0

请包括用JavaScript编写的示例MongoDB查询。 – ma11hew28 2011-05-23 22:06:20

+0

你知道吗。你是对的。我不应该投票给你。我只是感到沮丧,因为您的解决方案没有解释如何使用您建议的第一个排名算法来查询MongoDB。另外,'age'&'distance'不能存储在每篇文章中,因为它们是可变的。 'created_time'&'location'可以被存储,但是如何查询MongoDB,通过'rank'排序?如果你编辑你的帖子来添加按排名排序的MongoDB查询,我可以投票给你(它现在被锁定了),并且我会考虑给你50分的赏金积分。 – ma11hew28 2011-05-25 19:57:40