wuyouhome 2017-03-29 16:13 采纳率: 0%
浏览 2418
已结题

mongodb分组查询,取分数排行第1名

做排行,想取每个关卡(level)内积分最高的数据,共取2个。
数据表如图:
数据表

我使用的代码:

 function onRequest(request, response, modules) {
  //获取数据库对象
  var db = modules.oData;

  //黑坑1
  db.find({
    "table":"test",
    "limit":2,
    //"count":10,
    "order":"score",
    "score":{'$in':[1,2]},
    "keys":"name,level,score", 
   // "where":{}
    "count":4  
    },function(err,data){  
    //  level1Dat=data;
    var dataI=JSON.parse(data);
   response.send(dataI);
  }
  );

}

得到的结果

 {
  "count": 8,
  "results": [
    {
      "createdAt": "2017-03-29 23:35:32",
      "level": "2",
      "name": "王王",
      "objectId": "ygjV555B",
      "score": "10",
      "updatedAt": "2017-03-29 23:52:46"
    },
    {
      "createdAt": "2017-03-29 23:33:38",
      "level": "1",
      "name": "小明",
      "objectId": "nB0sLLLc",
      "score": "100",
      "updatedAt": "2017-03-29 23:35:52"
    }
  ]
}

想要的结果应该是下图的两个人,他们在关卡中积分最高
图片说明

新手,查了一天的分组和聚合,越看越糊涂,求大神帮忙,谢谢

  • 写回答

3条回答 默认 最新

  • 方丈的寺院 优质创作者: Java技术领域 2017-04-04 13:26
    关注

    思路先排序,再取分组

    db.test.aggregate([{$sort:{score:-1}},{$group: {_id:"$level",score:{$first:"$score"}}}])

    评论

报告相同问题?