mongoTemplate聚合aggregate操作
废话不多说,直接上代码
public int syncTotal(Date startTime, Date endTime) {int result = 0;Criteria criteria = new Criteria().andOperator(Criteria.where("data_time").gte(startTime), Criteria.where("data_time").lte(endTime));//创建aggreationAggregation aggregation = Aggregation.newAggregation(Aggregation.match(criteria),Aggregation.unwind("values"), Aggregation.group("mp_id").first("mp_id").as("mpId").count().as("total"), Aggregation.addFields().addFieldWithValue("type", "day_air").build());AggregationResults<TempMpId> out = mongoTemplate.aggregate(aggregation, "day_air", TempMpId.class);List<TempMpId> tempMpIdList = new ArrayList<>();for (Iterator<TempMpId> iterator = out.iterator(); iterator.hasNext(); ) {tempMpIdList.add(iterator.next());}return result;}
1.使用criteria 创建过滤筛选条件
2.使用Aggregation.unwind("values")方法,拆分values子集合,此方法会把
{"_id": "2204000000429520201204000000000","mp_id": "22040000004295","create_time": ISODate("2020-12-04T16:10:03.627Z"),"data_day": NumberInt("20201204"),"data_time": ISODate("2021-03-11T01:29:55.095Z"),"gd_id": "125F58D3-B632-43B0-B6D8-1EA90977F33C","mn": "20150724000002","protocol": "0","update_time": ISODate("2020-12-04T16:10:03.627Z"),"values": [{"cou_value": null,"flag": null,"avg_value": null,"mstatus": NumberInt("6"),"pollutant_code": "001","min_value": null,"avg_zs": null,"estatus": NumberInt("0"),"astatus": NumberInt("0"),"outlet_standard": "20","max_zs": null,"min_zs": null,"max_value": null,"sstatus": NumberInt("0")},{"cou_value": null,"flag": null,"avg_value": null,"mstatus": NumberInt("6"),"pollutant_code": "002","min_value": null,"avg_zs": null,"estatus": NumberInt("0"),"astatus": NumberInt("0"),"outlet_standard": "80","max_zs": null,"min_zs": null,"max_value": null,"sstatus": NumberInt("0")},{"cou_value": null,"flag": null,"avg_value": null,"mstatus": NumberInt("6"),"pollutant_code": "003","min_value": null,"avg_zs": null,"estatus": NumberInt("0"),"astatus": NumberInt("0"),"outlet_standard": "250","max_zs": null,"min_zs": null,"max_value": null,"sstatus": NumberInt("0")},{"cou_value": null,"flag": null,"avg_value": null,"mstatus": NumberInt("6"),"pollutant_code": "004","min_value": null,"avg_zs": null,"estatus": NumberInt("0"),"astatus": NumberInt("0"),"outlet_standard": "80","max_zs": null,"min_zs": null,"max_value": null,"sstatus": NumberInt("0")},{"cou_value": null,"flag": null,"avg_value": null,"mstatus": NumberInt("6"),"pollutant_code": "008","min_value": null,"avg_zs": null,"estatus": NumberInt("0"),"astatus": NumberInt("0"),"outlet_standard": "50","max_zs": null,"min_zs": null,"max_value": null,"sstatus": NumberInt("0")},{"pollutant_code": "B02","cou_value": null,"min_value": null,"flag": null,"avg_value": null,"outlet_standard": null,"max_value": null}]
}
拆分成,这样如果进行count的话,会把子集的总数算进去
// 1
{"_id": "2204000000429520201204000000000","mp_id": "22040000004295","create_time": ISODate("2020-12-04T16:10:03.627Z"),"data_day": NumberInt("20201204"),"data_time": ISODate("2021-03-11T01:29:55.095Z"),"gd_id": "125F58D3-B632-43B0-B6D8-1EA90977F33C","mn": "20150724000002","protocol": "0","update_time": ISODate("2020-12-04T16:10:03.627Z"),"values": {"cou_value": null,"flag": null,"avg_value": null,"mstatus": NumberInt("6"),"pollutant_code": "001","min_value": null,"avg_zs": null,"estatus": NumberInt("0"),"astatus": NumberInt("0"),"outlet_standard": "20","max_zs": null,"min_zs": null,"max_value": null,"sstatus": NumberInt("0")}
}// 2
{"_id": "2204000000429520201204000000000","mp_id": "22040000004295","create_time": ISODate("2020-12-04T16:10:03.627Z"),"data_day": NumberInt("20201204"),"data_time": ISODate("2021-03-11T01:29:55.095Z"),"gd_id": "125F58D3-B632-43B0-B6D8-1EA90977F33C","mn": "20150724000002","protocol": "0","update_time": ISODate("2020-12-04T16:10:03.627Z"),"values": {"cou_value": null,"flag": null,"avg_value": null,"mstatus": NumberInt("6"),"pollutant_code": "002","min_value": null,"avg_zs": null,"estatus": NumberInt("0"),"astatus": NumberInt("0"),"outlet_standard": "80","max_zs": null,"min_zs": null,"max_value": null,"sstatus": NumberInt("0")}
}// 3
{"_id": "2204000000429520201204000000000","mp_id": "22040000004295","create_time": ISODate("2020-12-04T16:10:03.627Z"),"data_day": NumberInt("20201204"),"data_time": ISODate("2021-03-11T01:29:55.095Z"),"gd_id": "125F58D3-B632-43B0-B6D8-1EA90977F33C","mn": "20150724000002","protocol": "0","update_time": ISODate("2020-12-04T16:10:03.627Z"),"values": {"cou_value": null,"flag": null,"avg_value": null,"mstatus": NumberInt("6"),"pollutant_code": "003","min_value": null,"avg_zs": null,"estatus": NumberInt("0"),"astatus": NumberInt("0"),"outlet_standard": "250","max_zs": null,"min_zs": null,"max_value": null,"sstatus": NumberInt("0")}
}// 4
{"_id": "2204000000429520201204000000000","mp_id": "22040000004295","create_time": ISODate("2020-12-04T16:10:03.627Z"),"data_day": NumberInt("20201204"),"data_time": ISODate("2021-03-11T01:29:55.095Z"),"gd_id": "125F58D3-B632-43B0-B6D8-1EA90977F33C","mn": "20150724000002","protocol": "0","update_time": ISODate("2020-12-04T16:10:03.627Z"),"values": {"cou_value": null,"flag": null,"avg_value": null,"mstatus": NumberInt("6"),"pollutant_code": "004","min_value": null,"avg_zs": null,"estatus": NumberInt("0"),"astatus": NumberInt("0"),"outlet_standard": "80","max_zs": null,"min_zs": null,"max_value": null,"sstatus": NumberInt("0")}
}// 5
{"_id": "2204000000429520201204000000000","mp_id": "22040000004295","create_time": ISODate("2020-12-04T16:10:03.627Z"),"data_day": NumberInt("20201204"),"data_time": ISODate("2021-03-11T01:29:55.095Z"),"gd_id": "125F58D3-B632-43B0-B6D8-1EA90977F33C","mn": "20150724000002","protocol": "0","update_time": ISODate("2020-12-04T16:10:03.627Z"),"values": {"cou_value": null,"flag": null,"avg_value": null,"mstatus": NumberInt("6"),"pollutant_code": "008","min_value": null,"avg_zs": null,"estatus": NumberInt("0"),"astatus": NumberInt("0"),"outlet_standard": "50","max_zs": null,"min_zs": null,"max_value": null,"sstatus": NumberInt("0")}
}// 6
{"_id": "2204000000429520201204000000000","mp_id": "22040000004295","create_time": ISODate("2020-12-04T16:10:03.627Z"),"data_day": NumberInt("20201204"),"data_time": ISODate("2021-03-11T01:29:55.095Z"),"gd_id": "125F58D3-B632-43B0-B6D8-1EA90977F33C","mn": "20150724000002","protocol": "0","update_time": ISODate("2020-12-04T16:10:03.627Z"),"values": {"pollutant_code": "B02","cou_value": null,"min_value": null,"flag": null,"avg_value": null,"outlet_standard": null,"max_value": null}
}
3.Aggregation.group("mp_id").first("mp_id").as("mpId").count().as("total")进行group,并且第一列mp_id起别名为mpId,count计数列起别名为total
4.Aggregation.addFields().addFieldWithValue("type", "day_air").build()) 添加自定义字段
5.AggregationResults<TempMpId> out = mongoTemplate.aggregate(aggregation, "day_air", TempMpId.class); 参数1为聚合配置,参数2为查询那个文档,参数3为接收的实体类
6.List<TempMpId> tempMpIdList = new ArrayList<>(); for (Iterator<TempMpId> iterator = out.iterator(); iterator.hasNext(); ) { tempMpIdList.add(iterator.next()); } 循环取出返回值
7.接收返回值的实体类说明
public class TempMpId implements Serializable {private String mpId;private Integer total;private String type;public String getMpId() {return mpId;}public void setMpId(String mpId) {this.mpId = mpId;}public Integer getTotal() {return total;}public void setTotal(Integer total) {this.total = total;}public String getType() {return type;}public void setType(String type) {this.type = type;}
}
mongoTemplate聚合aggregate操作相关推荐
- MongoDB聚合aggregate操作集锦
MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果.有点类似sql语句中的 count(*). 基本语法为:db.collection.agg ...
- MongoTemplate 聚合查询
一.概述 1. 聚合的表达式 MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果.有点类似sql语句中的 count(*). 下表展示了一些聚 ...
- mongodb 日期分组聚合_mongoose聚合aggregate按日期分组计算
简介 在MongoDB中,聚合(aggregate)主要用于进行处理数据,比如统计求和,求平均数等,并返回计算后的数据结果,这给我们带来了很多便捷之处,因为可以在读取数据的同时进行数据处理. 场景介绍 ...
- 4.聚合aggregate
聚合(aggregate)主要用于计算数据,类似sql中的sum().avg() 语法:db.集合名称.aggregate({管道:{表达式}}) 管道 管道在Unix和Linux中一般用于将当前命令 ...
- MongoDB 添加、查询(条件查询、排序、分页、返回指定字段)、修改、删除数据、聚合aggregate
MongoDB内部支持JavaScript语法,使用SpiderMonkey作为内部的JavaScript解释器引擎. 1.常用命令 show databases:显示数据库列表 use:切换数据库 ...
- 掌握聚合管道操作,熟悉Map-Reduce操作
一.实验综述 1.实验目的及要求 (1)掌握聚合管道操作 (2)熟悉Map-Reduce操作 (3)掌握索引相关概念 (4)掌握索引操作 实验过程: 1.数据库.集合.文档内容均使用实验二中的数据 2 ...
- Mongodb数据 ,聚合 aggregate
聚合 aggregate 聚合(aggregate)主要用于计算数据,类似sql中的sum().avg() 语法 db.集合名称.aggregate([{管道:{表达式}}]) 管道 管道在Unix和 ...
- mongoDB中聚合(aggregate)的具体使用
mongoDB中聚合(aggregate)的具体使用 - 简书 最近在学习mongoDB的使用,本文来介绍一下其中aggregate的具体使用 先来看一个分组的例子,本例中$group是一个管道操作符 ...
- 聚合 aggregate
聚合 aggregate 聚合(aggregate)主要用于计算数据,类似sql中的sum().avg() 语法 db.集合名称.aggregate([{管道:{表达式}}]) 管道 管道在Unix和 ...
最新文章
- Java中public,private,protected以及default的访问权限区别
- IntelliJ IDEA使用心得
- linux 批量替换所有文件中包含的字符串
- cassandra mongodb选择——cassandra:分布式扩展好,写性能强,以及可以预料的查询;mongodb:非事务,支持复杂查询,但是不适合报表...
- pythonista3使用教程-pythonista3都能做什么
- Got a packet bigger than 'max_allowed_packet' bytes
- 成绩转换(百分制到五级制的转换)-(只作新手参考)
- sql2012 数据库连接错误
- Linux 用户(User)查询篇
- 多线程 + java nio 实现按行读取并处理超大文件
- 泰山JDK8升级u302,找到了更好的整合mips办法
- MVPArms官方快速组件化方案开源,来自5K star的信赖
- 数商云SCM供应链系统方案服务亮点:生产管理更智能、产业供应链协同管理更便捷
- python webqq机器人_使用Python的Tornado框架实现一个简单的WebQQ机器人
- Echarts柱状图属性设置大全
- 软件文档的类型有哪些?
- 嵌入式数据库和数据库服务器的区别
- idea 2018.1破解激活方法,有效期至2099年
- 北京注册的公司如何缴纳公积金
- 虚假新闻检测论文阅读(七):A temporal ensembling based semi-supervised ConvNet for the detection of fake news
热门文章
- shell打开wifi命令_linux下使用shell命令通过wpa_cli控制wpa_supplicant连接wifi
- Java输入、输出流
- 联想拯救者 双硬盘window10 安装ubuntu16.04 双系统 踩坑总结
- linux中文文件名长度ftp无法传输,上传ftp时文件名不能太长
- Mac 安装watchman 常见错误
- Android 启动优化总结
- Linux 查看内核和发行版版本
- 【Python】sklearn机器学习之Birch聚类算法
- 6.pixi.js编写的塔防游戏(类似保卫萝卜)-游戏资源打包逻辑
- python 读取jpg文件是yuv_读取yuv文件