1.聚合管道实现简单的条件,排序数据查询功能。
注意点:执行 顺序可以完全参考mysql的书写顺序。
mysql是先where语句,然后排序,然后limit。
mongodb一样。也是必须先是条件语句,然后limit和sort。条件语句必须放到第一位,不然查询的可能为空。然后就是limit,sort谁在前的含义是不一样的。是先截取数据,对截取的数据排序还是先排序,在截取数据。这个也要考虑好了。正常是先排序,在截取数据。
注意点:查询结果用实体类封装。最好不用Map ,withOptions()用来解除mongodb 查询数据默认占用最大内存的(默认100M).
2.聚合管道实现分组统计功能
Aggregation.group() : 聚合函数,将某个字段或者某个数组作为分组统计的依据。单独的分组实际上没啥用,一般都是分组后接着做些具体的分组统计操作。
分组查询的结果一般需要起别名,意味着字段不在查询封装的实体中,可以使用Map来接受值
查询顺序是match,group,limit。
3.Aggregation常用函数
##2.1 Aggregation.group() : 聚合函数,将某个字段或者某个数组作为分组统计的依据,在group的基础上又扩展出以下函数:
2.1.1:sum() : 求和
2.1.2:max() : 获取最大值
2.1.3:min() : 获取最小值
2.1.4:avg() : 获取平均值
2.1.5:count() : 统计条目数
2.1.6: first () : 获取group by 后的某个字段的首个值
2.1.7:last() : 获取 group by 后的某个字段的最后一个值
##2.2 Aggregation.match() : 过滤函数,主要存储过滤数据的条件,输出符合条件的记录
##2.3 Aggregation.project(): 修改数据结构函数,将前面管道中的获取的字段进行重名,增加,修改字段等操作。
##2.4 Aggregation.sort(): 排序函数,将上级管道的内容按照某个字段进行排序并且输出。
##2.5 Aggregation.limit(): 限制输出函数,将聚合返回的内容限定在某个条目之内。
##2.6 Aggregation.skip(): 跳过指定数量的条目再开始返回数据的函数,通常和sort(),limit()配合,实现数据翻页查询等操作。
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 out = mongoTemplate.aggregate(aggregation, "day_air", TempMpId.class); 参数1为聚合配置,参数2为查询那个文档,参数3为接收的实体类
6.List tempMpIdList = new ArrayList<>(); for (Iterator iterator = out.iterator(); iterator.hasNext(); ) { tempMpIdList.add(iterator.next()); } 循环取出返回值