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"
}
]
}
新手小白,查了一天的分组和聚合,越看越糊涂,求大神帮忙指点,谢谢
回答:
不知道你想要的形式是怎么样的,所以随便写了一下,形式上可以自己再转换。另外也没有给测试数据,以下脚本没有测试过,自己调试一下。
db.collection("test").aggregate([ // {$match: ...} 如果有条件的话
{$sort: {level: 1, score: -1},
{$group: {_id: "$level", student: "$first"}}
]).toArray(function(err, data) {
// ...
});
关于Aggregation Frameworks的话题太大了没法在这里讲。请查找相关的介绍看一下。这里用到了其中几个运算符:$sort, $group, $first。
回答:
请使用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!
回答:
Node.js 使用 mongodb,使用 mongoose 很方便。可以使用 model模块的 mapReduce, 或者 aggregation.
soonfy
以上是 mongodb分组查询,取各班第1名 的全部内容, 来源链接: utcz.com/p/196394.html