废话不多说,直接上代码

 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操作相关推荐

  1. MongoDB聚合aggregate操作集锦

    MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果.有点类似sql语句中的 count(*). 基本语法为:db.collection.agg ...

  2. MongoTemplate 聚合查询

    一.概述 1. 聚合的表达式 MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果.有点类似sql语句中的 count(*). 下表展示了一些聚 ...

  3. mongodb 日期分组聚合_mongoose聚合aggregate按日期分组计算

    简介 在MongoDB中,聚合(aggregate)主要用于进行处理数据,比如统计求和,求平均数等,并返回计算后的数据结果,这给我们带来了很多便捷之处,因为可以在读取数据的同时进行数据处理. 场景介绍 ...

  4. 4.聚合aggregate

    聚合(aggregate)主要用于计算数据,类似sql中的sum().avg() 语法:db.集合名称.aggregate({管道:{表达式}}) 管道 管道在Unix和Linux中一般用于将当前命令 ...

  5. MongoDB 添加、查询(条件查询、排序、分页、返回指定字段)、修改、删除数据、聚合aggregate

    MongoDB内部支持JavaScript语法,使用SpiderMonkey作为内部的JavaScript解释器引擎. 1.常用命令 show databases:显示数据库列表 use:切换数据库 ...

  6. 掌握聚合管道操作,熟悉Map-Reduce操作

    一.实验综述 1.实验目的及要求 (1)掌握聚合管道操作 (2)熟悉Map-Reduce操作 (3)掌握索引相关概念 (4)掌握索引操作 实验过程: 1.数据库.集合.文档内容均使用实验二中的数据 2 ...

  7. Mongodb数据 ,聚合 aggregate

    聚合 aggregate 聚合(aggregate)主要用于计算数据,类似sql中的sum().avg() 语法 db.集合名称.aggregate([{管道:{表达式}}]) 管道 管道在Unix和 ...

  8. mongoDB中聚合(aggregate)的具体使用

    mongoDB中聚合(aggregate)的具体使用 - 简书 最近在学习mongoDB的使用,本文来介绍一下其中aggregate的具体使用 先来看一个分组的例子,本例中$group是一个管道操作符 ...

  9. 聚合 aggregate

    聚合 aggregate 聚合(aggregate)主要用于计算数据,类似sql中的sum().avg() 语法 db.集合名称.aggregate([{管道:{表达式}}]) 管道 管道在Unix和 ...

最新文章

  1. Java中public,private,protected以及default的访问权限区别
  2. IntelliJ IDEA使用心得
  3. linux 批量替换所有文件中包含的字符串
  4. cassandra mongodb选择——cassandra:分布式扩展好,写性能强,以及可以预料的查询;mongodb:非事务,支持复杂查询,但是不适合报表...
  5. pythonista3使用教程-pythonista3都能做什么
  6. Got a packet bigger than 'max_allowed_packet' bytes
  7. 成绩转换(百分制到五级制的转换)-(只作新手参考)
  8. sql2012 数据库连接错误
  9. Linux 用户(User)查询篇
  10. 多线程 + java nio 实现按行读取并处理超大文件
  11. 泰山JDK8升级u302,找到了更好的整合mips办法
  12. MVPArms官方快速组件化方案开源,来自5K star的信赖
  13. 数商云SCM供应链系统方案服务亮点:生产管理更智能、产业供应链协同管理更便捷
  14. python webqq机器人_使用Python的Tornado框架实现一个简单的WebQQ机器人
  15. Echarts柱状图属性设置大全
  16. 软件文档的类型有哪些?
  17. 嵌入式数据库和数据库服务器的区别
  18. idea 2018.1破解激活方法,有效期至2099年
  19. 北京注册的公司如何缴纳公积金
  20. 虚假新闻检测论文阅读(七):A temporal ensembling based semi-supervised ConvNet for the detection of fake news

热门文章

  1. shell打开wifi命令_linux下使用shell命令通过wpa_cli控制wpa_supplicant连接wifi
  2. Java输入、输出流
  3. 联想拯救者 双硬盘window10 安装ubuntu16.04 双系统 踩坑总结
  4. linux中文文件名长度ftp无法传输,上传ftp时文件名不能太长
  5. Mac 安装watchman 常见错误
  6. Android 启动优化总结
  7. Linux 查看内核和发行版版本
  8. 【Python】sklearn机器学习之Birch聚类算法
  9. 6.pixi.js编写的塔防游戏(类似保卫萝卜)-游戏资源打包逻辑
  10. python 读取jpg文件是yuv_读取yuv文件