使用MongoDB查询用户相对排行榜

时间:2015-09-21 08:57:00

标签: mongodb

我有一组用户,每个用户都有一个点属性(参见下面的架构)。

我的最终目标是根据特定的用户位置返回有限文档的排序数组,换句话说,是针对特定用户位置的排行榜的一小部分。

目前,我查询并排序所有用户,在返回的数组中找到我想要的用户,并根据该数据切片。我想知道是否有一个查询可以让我回复所有用户。

示例用户架构:

/* 1 */
{
    "_id" : ObjectId("..."),
    "points" : 5852 ,
    "key" : "user1"
}

/* 2 */
{
    "_id" : ObjectId("..."),
    "points" : 3835,
    "key" : "user2"
}

/* 3 */
{
    "_id" : ObjectId("..."),
    "points" : 1984,
    "key" : "user3"
}

/* 4 */
{
    "_id" : ObjectId("...."),
    "points" : 2437,
    "key" : "user4"
}

让我们假设我希望查询返回按点排序的3个文档 - “user4”(我的相对用户)的文档,他在排行榜中的文档(上例中的“user3”)和他之前的1个文档(上例中的“user2”)

谢谢!

编辑:我也使用mongoose,如果这简化了事情。

编辑2:请参阅下面的预期输出 -

 /* 1 */
    {
        "_id" : ObjectId("..."),
        "points" : 3835,
        "key" : "user2"
    }
/* 2 */
    {
        "_id" : ObjectId("...."),
        "points" : 2437,
        "key" : "user4"
    }
 /* 3 */
    {
        "_id" : ObjectId("..."),
        "points" : 1984,
        "key" : "user3"
    }

请注意,“user1”未出现在输出中,因为查询要求上面排名的1位用户和排名低于“user4”的1位用户

1 个答案:

答案 0 :(得分:2)

听起来你正试图这样做:rank leaderboard in mongo with surrounding players

正如在该问题的答案中所述,最简单的方法是使用三个查询。即使这是查询数量的增加,您传输的数据也会大大减少。