2016-08-10 65 views
0

我正尝试使用MongoDBpymongo构建排行榜类型的应用程序,并且该集合的设置非常简单,只需按整数值排序即可。这使得使用sortlimit来计算顶部和底部用户相当无足轻重。在已排序的Mongo集合中查找文档的位置

我的问题是如果我想搜索一个位于集合中间的用户。我将如何创建一个能够确定用户在有序集合中的位置的查询?

使用该数据集例如:

{user: 'A', value: 20} 
{user: 'B', value: 10} 
{user: 'C', value: 5} 
{user: 'D', value: 4} 
{user: 'E', value: 1} 

我将如何构建一个给定的,我们正在寻找{user: 'C'}查询它不仅返回用户文件,也是用户是3日在有序列表?

下一个问题是我有这个,我怎么也确定用户BD在周围的用户?

我已经知道如何将整个列表拉到我的应用程序中,并通过它快速搜索,但这似乎是对这个问题的错误/昂贵的答案。

回答

1

可能为此想到的最好方法是运行2个查询。第一个查询将获得当前用户的值。然后使用该值从该查询中减去/添加一些常数值,以使用$gt和$ lt``派生具有接近值的用户范围。

有一个棘手的问题,那就是该范围内可能没有任何值,因此如果发生这种情况,您可能需要对此进行解释并可能运行其他查询。

但这实际上并没有给你排名,这是你要求的。如果这些值(我假设这些分数是相对有限的)相对有限,那么您可以存储一个或多个具有单独分数值的文档,您可以使用这些值来知道相邻范围是什么。这里有一个blog post提出了一个类似的想法。

不得不通过一个大集合来读取位置将是低效的,可能不被大型n接受。但取决于问题的范围/规模,这可能是可以接受的和最简单的选择。

+0

多个文件将是可能的......对于定期运行的某种清理工作,如果天真方法证明过于昂贵,我会记住这一点。 – EEP

相关问题