javascript - 如何根据游戏应用程序的聚合管道中的总点数计算排名

标签 javascript node.js mongodb mongoose

我正在开发游戏应用程序,该应用程序将拥有数千名用户。

我当前的聚合管道输出

[
    {
        "USERID": "U0004",
        "Total_Points": 10
    },
    {
        "USERID": "U0001",
        "Total_Points": 8
    },
    {
        "USERID": "U0006",
        "Total_Points": 8
    },
    {
        "USERID": "U0002",
        "Total_Points": 2
    },
    {
        "USERID": "U0003",
        "Total_Points": 1
    },

    {
        "USERID": "U0005",
        "Total_Points": 1
    }
]

预期输出

[
    {
        "USERID": "U0004",
        "Total_Points": 10,
        "Rank": 1
    },
    {
        "USERID": "U0001",
        "Total_Points": 8,
        "Rank": 2
    },
    {
        "USERID": "U0006",
        "Total_Points": 8,
        "Rank": 2
    },
    {
        "USERID": "U0002",
        "Total_Points": 2,
        "Rank": 4
    },
    {
        "USERID": "U0003",
        "Total_Points": 1,
        "Rank": 5
    },

    {
        "USERID": "U0005",
        "Total_Points": 1,
        "Rank": 5
    }
]

这是使用排行榜排名概念从 mongodb 聚合中获取输出的最佳且最优化的方法。

我在我的项目中使用 mongoose mongodb 连接。

我可以使用 for 循环来操作数据,但它似乎效率很低。

提前致谢。

非常感谢您的评论。

下面是示例排行榜的图片

link

最佳答案

不要认为你可以用聚合来做到这一点。

您可以使用 javascript 在一行中完成此操作。 对数组进行排序,然后映射以获得索引的排名。

  a = [
    {
        "USERID": "U0004",
        "Total_Points": 10
    },
    {
        "USERID": "U0001",
        "Total_Points": 8
    },
    {
        "USERID": "U0006",
        "Total_Points": 8
    },
    {
        "USERID": "U0002",
        "Total_Points": 2
    },
    {
        "USERID": "U0003",
        "Total_Points": 1
    },

    {
        "USERID": "U0005",
        "Total_Points": 1
    }
]
a = a.sort(function(a, b){
    return b.Total_Points - a.Total_Points;
}).map(function(e, i){
  e.Rank = (i + 1);
  return e;
});

{USERID: "U0004", Total_Points: 10, Rank: 1}
{USERID: "U0001", Total_Points: 8, Rank: 2}
{USERID: "U0006", Total_Points: 8, Rank: 3}
{USERID: "U0002", Total_Points: 2, Rank: 4}
{USERID: "U0003", Total_Points: 1, Rank: 5}
{USERID: "U0005", Total_Points: 1, Rank: 6}

关于javascript - 如何根据游戏应用程序的聚合管道中的总点数计算排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50982594/

相关文章:

java - 有什么方法可以自动创建 Mongo 编解码器吗?

angularjs - Node JS/Express 端点生成损坏的 xlsx 文件

javascript - 使用 webpack 编译时来自 Terser 的 main.js 中的错误

node.js - Bigbluebutton设置html5开发人员客户端登录以与join api开会调用空html响应

javascript - 将 Mongoose 对象添加到nodejs中的数组

node.js - 在nodejs中解析jsonld

javascript - JQuery - 取消选择/单击关闭属性

javascript - 使用个人 api 中的刷新 token 更新访问 token

javascript - onclick 打开最近的详细信息元素

javascript - Cordova javascript错误: has no method startsWith Android