如何为按特定字段排序的每个退回商品添加排名?

时间:2018-06-16 14:02:17

标签: node.js mongodb mongoose

我按照奖励计数为我的图书集创建排名系统,以下是从我的数据库返回的结果

    {
        'awardCount' : 12000,
        'year' : 1967,
        'by' : 'IEEE Computer Society'
    }, 
    {
        'awardCount' : 11230,
        'year' : 1993,
        'by' : 'National Academy of Engineering'
    }, 
    {
        'awardCount' : 10600,
        'year' : 1993,
        'by' : 'National Academy of Engineering'
    }
........about 10000+ more and sorted by awardCount

我使用此查询获取上面的结果

.find()
.sort({awardCount: -1 })

我的问题是,是否可以添加排名'每个项目中的字段显示排名顺序?例如

  {
        'awardCount' : 12000,
        'year' : 1967,
        'by' : 'IEEE Computer Society',
        'rank': 1

    },
    {
        'awardCount' : 11230,
        'year' : 1993,
        'by' : 'National Academy of Engineering',
        'rank': 2
    }

如果没有,在这种情况下获得排名的最佳解决方案是什么?非常感谢你!

1 个答案:

答案 0 :(得分:0)

您可以使用 mongodb聚合来实现此目的。您基本上按胜负对文档进行排序,然后在保留索引的同时将每个用户推入一个新数组中,该索引是用户之后的排名您可以在这个新创建的数组上简单地使用“展开”并找到有问题的用户,这将为您提供该用户的排名以及其他详细信息。

以下是示例汇总管道:

[{
    "$sort": { 
        "awardCount": -1
    }
},
{
    "$group": {
        "_id": false,
        "books": {
            "$push": {
                "_id": "$_id",
                "by": "$by",
                "year": "$year",
                "awardCount": "$awardCount"
            }
        }
    }
},
{
    "$unwind": {
        "path": "$books",
        "includeArrayIndex": "rank"
    }
}]