mongodb 名次查询问题

用户集合中,按照用户得分排序后,如何查询某个用户所在的排名?

简单方法就是:查询所有用户并按照得分排序后,输出通过代码找到当前用户所在的数组下标;貌似不科学~~

如何正确处理?

阅读 2.9k
1 个回答

官方文档翻了好久,最后找到了 $indexOfArray 配合 $group $project 既可以实现;

db.collection.aggregate([
    {$sort:{score:-1}}, //按照分数排序
    {$group:{_id:null,all:{$push:"$openid"}}},  // 将所有排序结果push到all数组中,方便下面使用$indexOfArray
    {$project:{_id:0,total:{$size:"$all"},index:{ $indexOfArray:[ "$all",openid] }}}  // 这里的openid为要查找名次的openid
])

// 返回结果类似下面这样: total 总人数,index 为名次
{ "total" : 3, "index" : 1 }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进