在已排序的Mongo集合中查找文档的位置

时间:2016-08-10 20:52:21

标签: mongodb mongodb-query pymongo

我正在尝试使用MongoDBpymongo构建排行榜类型的应用,并且设置一个非常简单的集合,我按整数值排序。这使得使用sortlimit来确定顶级和底层用户非常简单。

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

使用此数据集,例如:

{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 个答案:

答案 0 :(得分:1)

可能最让人想到的方法是运行2个查询。第一个查询是获取当前用户的值。然后使用该值从该查询中减去/添加一些常量值,以使用$gt和$ lt``派生一系列具有接近值的用户。

棘手的是,范围内可能没有任何值,因此您可能需要考虑到这一点,如果发生这种情况,可能会运行其他查询。

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

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