mongodb分组查询,取各班第1名

发布于 2022-09-04 18:14:00 字数 1238 浏览 19 评论 0

做排行,想取每个班级(level)里积分最高的人,各取1个。
数据表如图:
图片描述

结果应该为:
图片描述

我使用的代码为:

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

∝单色的世界 2022-09-11 18:14:00

不知道你想要的形式是怎么样的,所以随便写了一下,形式上可以自己再转换。另外也没有给测试数据,以下脚本没有测试过,自己调试一下。

db.collection("test").aggregate([
    // {$match: ...} 如果有条件的话
    {$sort: {level: 1, score: -1},
    {$group: {_id: "$level", student: "$first"}}
]).toArray(function(err, data) {
    // ...
});

关于Aggregation Frameworks的话题太大了没法在这里讲。请查找相关的介绍看一下。这里用到了其中几个运算符:$sort, $group, $first

半葬歌 2022-09-11 18:14:00

请使用MongodB的aggregation;aggregation是MongoDB的重要特性,主要实现各类分析性查询、统计、报表功能。

大概使用请参考如下:

db.odata.aggregate(
   [
     {
       $group:
         {
           _id: "$level",
           maxScore: { $max: "$score" }
         }
     }
   ]
)

上面是在MongoDB Shell里面的示例,MongoDB驱动都支持aggregation,您按照驱动的语法调整一下。

今后有类似需求,请首先考虑aggregation。

详细内容请参考:

https://docs.mongodb.com/manu...

供参考。

Love MongoDB! Have Fun!

回眸一遍 2022-09-11 18:14:00

Node.js 使用 mongodb,使用 mongoose 很方便。可以使用 model模块的 mapReduce, 或者 aggregation.

soonfy

温暖的光 2022-09-11 18:14:00

分组排序,然后取第一个(first),就可以了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文