【问题标题】:How to add ranking to each returned item ordered by specific field?如何为按特定字段排序的每个返回项目添加排名?
【发布时间】:2018-11-26 01:36:16
【问题描述】:

我正在为我的图书收藏建立一个按奖励计数排序的排名系统,下面是从我的数据库返回的结果

    {
        '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
    }

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

【问题讨论】:

  • 为什么要加排名?无法添加带有索引的自定义字段...为什么我 100% 确定,因为我昨天问了同样的问题stackoverflow.com/questions/50870664/….. 如果您在其中设置限制,您可以添加,但这会更复杂且成本更高
  • 我想要这本书的排名,这就是我需要排名的原因。
  • 你只能在插入文件的时候这样做......其余的我在上面的cmets上告诉你

标签: node.js mongodb mongoose


【解决方案1】:

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

这是一个示例聚合管道:

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

【讨论】:

    猜你喜欢
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    相关资源
    最近更新 更多