您的位置:首页 > 大数据 > 人工智能

sails-mongo 使用 groupBy 进行分组遇到的坑

2017-09-13 18:01 323 查看
博主在实现分组统计功能时又遇到坑,参见我以前写的博客sails-mysql 使用 groupBy 进行分组遇到的坑

今天我们来谈谈mongodb的分组功能,需要注意的地方同上,groupBy 要与 sum, average, min, max 成对出现,这里不再多说。

这次遇到的需求比较复杂,涉及到分组、排序、分页、对比排名。首先要分组,然后排序,然后分页,最后对比排名。

先放代码,看博主是怎么征服这些需求的,哈哈哈哈哈哈哈

var field = req.body['field'] || 'keyword';//要分组的字段,默认关键字
var starttime = req.body['starttime'] || 1451577600;//时间戳
var starttime2 = req.body['starttime2'] || 1451577600;
var endtime = req.body['endtime'] || 1454255999;
var endtime2 = req.body['endtime2'] || 1454255999;
var page = req.body.page || 1;
var limit = req.body.limit || 10;
var skip = (page-1)*limit;
var query = req.body['query'] || '';//搜索词
query = Util.RemoveXSS(query);
var match1 = { visitime: { '$gte': parseInt(starttime), '$lte': parseInt(endtime) } };
var match2 = { visitime: { '$gte': parseInt(starttime2), '$lte': parseInt(endtime2) } };
if(query!=''){
match1[field] = { $regex: query, $options: '$i' };
match2[field] = { $regex: query, $options: '$i' };
}
//数量条件
var where = [
{
$match: match1
},
{
$group: {
_id: '$'+field,
value: { $sum: 1 }
}
},
{ $sort: { value: -1 } }
];
//对比条件
var where2 = [
{
$match: match2
},
{
$group: {
_id: '$'+field,
value: { $sum: 1 }
}
},
{ $sort: { value: -1 } }
];
Model.native(function(err, collection) {
if(err){ return next(err); }
var logDoc = collection.aggregate(where);//总数据
logDoc.toArray(function (err, log) {
if(err){ return next(err); }
var count = log.length;

logDoc.skip(parseInt(skip)).limit(parseInt(limit))//分页
.toArray(function (err, data1) {
if(err){ return next(err); }

collection.aggregate(where2).toArray(function (err, data2) {
if(err){ return next(err); }
var i = data1.length;//现在排名
while (i--) {
data1[i].name = data1[i]['_id'];
data1[i].value2 = skip+i+1;
var j = data2.length;//对比排名
while (j--) {
if(data1[i]['_id'] == data2[j]['_id']){
//排名变化
data1[i].value3 = j - i;
break;
}
//避免过量对比
if(j+limit+100 < data2.length){break;}
}
}
return res.send({
count: count,
data: data1
});
});
});
});
});


2017年9月13日

重庆-传说
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mongodb 分页 sails-js