做排行,想取每个关卡(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
字符串不能直接排序,先转化成数字,再根据一楼进行排序