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"
    }
  ]
}

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

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

思路先排序,再取分组

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

这篇关于aggregate的文章还不错,可以参考一下~
http://forum.foxera.com/mongodb/topic/252/mongodb-aggregate-%E8%BF%90%E7%94%A8%E4%BB%A5%E5%8F%8A%E5%9C%A8c-%E5%AF%B9%E5%BA%94%E6%96%B9%E6%B3%95?un=wt

字符串不能直接排序,先转化成数字,再根据一楼进行排序