mongodb分组查询,取各班第1名
做排行,想取每个班级(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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
不知道你想要的形式是怎么样的,所以随便写了一下,形式上可以自己再转换。另外也没有给测试数据,以下脚本没有测试过,自己调试一下。
关于Aggregation Frameworks的话题太大了没法在这里讲。请查找相关的介绍看一下。这里用到了其中几个运算符:$sort, $group, $first。
请使用MongodB的aggregation;aggregation是MongoDB的重要特性,主要实现各类分析性查询、统计、报表功能。
大概使用请参考如下:
上面是在MongoDB Shell里面的示例,MongoDB驱动都支持aggregation,您按照驱动的语法调整一下。
今后有类似需求,请首先考虑aggregation。
详细内容请参考:
https://docs.mongodb.com/manu...
供参考。
Love MongoDB! Have Fun!
Node.js 使用 mongodb,使用 mongoose 很方便。可以使用 model模块的 mapReduce, 或者 aggregation.
soonfy
分组排序,然后取第一个(first),就可以了