mongodb - 使用 MongoDB 查询用户相关排行榜

标签 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。

Edit2: 请看下面的预期输出 -

 /* 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 个用户排名低于“user4”

最佳答案

听起来您正在尝试这样做:rank leaderboard in mongo with surrounding players

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

关于mongodb - 使用 MongoDB 查询用户相关排行榜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32691062/

相关文章:

javascript - Meteor 监听 mongo 数据库更新

mongodb - 复合索引可以用于搜索MongoDB中的单个字段吗?

node.js - Node.js 应用程序中的代码执行顺序

java - MongoDB getDatabaseNames() 已弃用

javascript - model.find({}).populate ('place' ).populate ('location' ) 不返回地点和位置

mongodb - 使用 MongoTemplate 时是否可以动态设置特定查询的读取首选项?

java - 使用 java 和 video.js 从输入流加载视频

node.js - Node js无法连接到Redis Docker Centos 7

mongodb - 分组文档时合并数组

java - 通过 Morphia 获取 POJO 中的字段后设置该字段