sails-mongo 使用 groupBy 进行分组遇到的坑
2017-09-13 18:01
323 查看
博主在实现分组统计功能时又遇到坑,参见我以前写的博客sails-mysql 使用 groupBy 进行分组遇到的坑
今天我们来谈谈mongodb的分组功能,需要注意的地方同上,groupBy 要与 sum, average, min, max 成对出现,这里不再多说。
这次遇到的需求比较复杂,涉及到分组、排序、分页、对比排名。首先要分组,然后排序,然后分页,最后对比排名。
先放代码,看博主是怎么征服这些需求的,哈哈哈哈哈哈哈
2017年9月13日
重庆-传说
今天我们来谈谈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日
重庆-传说
相关文章推荐
- sails-mysql 使用 groupBy 进行分组遇到的坑
- datatable使用groupby进行分组统计
- pandas中Groupby的使用(三)-根据dtype对列进行分组
- C# datatable使用groupby进行分组统计
- python中Groupby使用(四)-通过函数进行分组
- pandas中Groupby使用(二)-对分组进行迭代
- 如何在datatable中使用groupby进行分组统计
- DataTable、List使用groupby进行分组和分组统计;List、DataTable查询筛选方法
- java使用mongo数据库,怎么根据两列进行分组统计并分页
- datatable使用groupby进行分组统计
- Hive:有表A与表B进行inner join,如果A分组内包含有数据,使用A,否则使用B分组下的数据
- 使用函数分组对某个字段进行字符串的累加
- php7中使用mongoDB的聚合操作对数据进行分组求和统计操作
- Linq 和 Lambda 查询中按照多个值进行分组GroupBy
- PHP使用mongo是遇到的错误
- 使用jquery的getjson()遇到的跨域访问问题(二)——使用拦截器进行数据封装
- 使用split进行分割时遇到特殊字符的问题
- android使用CMake进行jni编写遇到的一些问题
- 使用 通用mapper时 根据主键进行 删除 更新操作 遇到的问题
- ORACLE使用row_number() over(...)对查询数据进行分组并排序