javascript - mongodb分组查询,取各班第1名
PHPz
PHPz 2017-04-11 13:04:44
[JavaScript讨论组]

做排行,想取每个班级(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"
    }
  ]
}

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

PHPz
PHPz

学习是最好的投资!

全部回复(3)
怪我咯

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

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

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

迷茫

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

soonfy

阿神

请使用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!

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号