mongoTemplate聚合操作
来源:互联网 发布:今日热点是什么软件 编辑:程序博客网 时间:2024/06/08 06:26
准备数据 customer 集合,数据类型如下:(只是部分数据,数据量太多就不一一列出)
{ "_id" : ObjectId("594c78a1c5fea52a445b8cd2"), "probMac" : "141FBA789098", "devcMac" : "BC3AEA0E50CB", "inTime" : "20170612133513", "outTime" : "20170612133545", "rssi" : "14" }{ "_id" : ObjectId("594c78a1c5fea52a445b8cd3"), "probMac" : "141FBA7890E8", "devcMac" : "38295A676DA3", "inTime" : "20170612133701", "outTime" : "20170612133716", "rssi" : "3" }{ "_id" : ObjectId("594c78a1c5fea52a445b8cd4"), "probMac" : "141FBA789050", "devcMac" : "18D276C360FF", "inTime" : "20170612133746", "outTime" : "20170612133750", "rssi" : "8" }{ "_id" : ObjectId("594c78a2c5fea52a445b8cd5"), "probMac" : "141FBA789050", "devcMac" : "E8BBA876D18A", "inTime" : "20170612134003", "outTime" : "20170612134012", "rssi" : "9" }{ "_id" : ObjectId("594c78a2c5fea52a445b8cd6"), "probMac" : "141FBA789050", "devcMac" : "3CB6B75AFF3A", "inTime" : "20170612134133", "outTime" : "20170612134141", "rssi" : "11" }{ "_id" : ObjectId("594c78a2c5fea52a445b8cd7"), "probMac" : "141FBA789050", "devcMac" : "D03742643B6D", "inTime" : "20170612134215", "outTime" : "20170612134247", "rssi" : "11" }{ "_id" : ObjectId("594c78a2c5fea52a445b8cd8"), "probMac" : "141FBA789050", "devcMac" : "C09F054B6DB8", "inTime" : "20170612134217", "outTime" : "20170612134253", "rssi" : "27" }
1 通过mongoTemplate.group方法
public <T> GroupByResults<T> group(String inputCollectionName, GroupBy groupBy, Class<T> entityClass)
public <T> GroupByResults<T> group(Criteria criteria, String inputCollectionName, GroupBy groupBy,
Class<T> entityClass)
一种可以带过滤条件一种全集合分组查询
使用第一种不带条件的查询
@RequestMapping("/test")@ResponseBodypublic Object test(){//多个key组合分组,一个key分组掺入一个参数即可GroupBy groupBy = GroupBy.key("devcMac","probMac").initialDocument("{total:0}") .reduceFunction("function(doc, prev){prev.total+=1}"); GroupByResults<BasicDBObject> gbr = mongoTemplate.group("customer", groupBy, BasicDBObject.class); return gbr.iterator();}
返回结果:
[{"devcMac":"BC3AEA0E50CB","probMac":"141FBA789098","total":8.0},{"devcMac":"38295A676DA3","probMac":"141FBA7890E8","total":1.0},{"devcMac":"18D276C360FF","probMac":"141FBA789050","total":1.0},{"devcMac":"E8BBA876D18A","probMac":"141FBA789050","total":2.0},{"devcMac":"3CB6B75AFF3A","probMac":"141FBA789050","total":6.0},{"devcMac":"D03742643B6D","probMac":"141FBA789050","total":1.0}]
如果想返回其他的字段可以更改reduce函数,和 initialDocument 参数
比如加上inTime值的数组内容
@RequestMapping("/groupByMutiKeyOther")@ResponseBodypublic Object groupByMutiKeyOther(String... key) {// 多个key组合分组,一个key分组掺入一个参数即可GroupBy groupBy = GroupBy.key("probMac","devcMac").initialDocument("{inTime:[],count:0}").reduceFunction("function(doc, prev){"+ "prev.inTime.push(doc.inTime);"+ "prev.count+=1}");GroupByResults<BasicDBObject> gbr = mongoTemplate.group("customer",groupBy, BasicDBObject.class);return gbr.iterator();}
返回结果:
[{"probMac":"141FBA789098","devcMac":"BC3AEA0E50CB","inTime":["20170612133513","20170612172022","20170612185417","20170613021023","20170628034820","20170628054026","20170628102731","20170628142909"],"count":8.0},{"probMac":"141FBA7890E8","devcMac":"38295A676DA3","inTime":["20170612133701"],"count":1.0},{"probMac":"141FBA789050","devcMac":"18D276C360FF","inTime":["20170612133746"],"count":1.0},{"probMac":"141FBA789050","devcMac":"E8BBA876D18A","inTime":["20170612134003","20170617151506"],"count":2.0},{"probMac":"141FBA789050","devcMac":"3CB6B75AFF3A","inTime":["20170612134133","20170616215301","20170619002323","20170625061702","20170625200712","20170627235117"],"count":6.0},{"probMac":"141FBA789050","devcMac":"D03742643B6D","inTime":["20170612134215"],"count":1.0}]
2 mapreduce分组统计
@RequestMapping("/groupByMapReduce")@ResponseBodypublic Object groupByMapReduce(String key) { String map = "function() { emit(this.probMac, {count:1});}"; String reduce = "function(key, values) {" + "var total = 0;" + "for(var i=0;i<values.length;i++){total += values[i].count;}" + "return {count:total};}"; MapReduceResults<BasicDBObject> mrr = mongoTemplate.mapReduce("customer", map, reduce, BasicDBObject.class);return mrr.iterator();}
返回结果内容:
[{"_id":"141FBA789010","value":{"count":505.0}},{"_id":"141FBA789050","value":{"count":18287.0}},{"_id":"141FBA789098","value":{"count":7489.0}},{"_id":"141FBA7890E8","value":{"count":8626.0}}]
3 通过 mongoTemplate.aggregate方法
@RequestMapping("/groupByAggregation")@ResponseBodypublic Object groupByAggregation(String key) {AggregationResults<BasicDBObject> a = mongoTemplate.aggregate(Aggregation.newAggregation(Aggregation.group("probMac").count().as("count")), Customer.class, BasicDBObject.class);return a.iterator();}
返回结果:
[{"_id":"141FBA789010","count":505},{"_id":"141FBA789050","count":18291},{"_id":"141FBA7890E8","count":8644},{"_id":"141FBA789098","count":7493}]
阅读全文
0 0
- mongotemplate的聚合操作
- mongoTemplate聚合操作
- MongoTemplate操作mongodb
- MongoTemplate操作mongodb
- mongotemplate mongodb的各种操作 模糊查询 精确查询 等等
- mongotemplate mongodb的各种操作 模糊查询 精确查询 等等
- mongotemplate mongodb的各种操作 模糊查询 精确查询 等等
- Spring mongoTemplate的批量更新操作,取自Stack Overflow
- mongotemplate mongodb的各种操作 模糊查询 精确查询 等等
- 使用MongoTemplate管理MongoDB的一些查询操作(Java)
- 分别通过mongoTemplate聚合查询(带参数模糊查询)分页、Jpa查询(带参数模糊查询)分页
- MongoTemplate笔记
- mongoTemplate Aggregation
- LINQ查询操作--聚合
- .NET LINQ 聚合操作
- MongoDB中的聚合操作
- mongdb聚合操作
- mongodb聚合函数操作
- 悼念512汶川大地震遇难同胞——老人是真饿了
- win10系统还原失败错误0x80070091的解决方法
- 测试两周人的感悟
- 过程创建索引
- Past duration 0.666664 too large
- mongoTemplate聚合操作
- DNS协议详解及报文格式分析
- DataTables warning (table id = 'IDTableName'): Cannot reinitialise DataTable
- yii2.0高级框架配置时打开init.bat秒退的解决方法
- POJ 2918 Tudoku 【DFS】
- gitingnore忽略提交文件配置
- JSTL标签
- python通过testrpc访问以太坊数据入门
- 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。