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));
        //创建aggreation
        Aggregation 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;
    }
}

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: mongotemplate.aggregate是Spring Data MongoDB提供的一种聚合操作方法,用于对MongoDB数据库中的数据进行聚合操作,可以实现类似于SQL中的GROUP BY、SUM、COUNT等操作。通过mongotemplate.aggregate方法,可以使用MongoDB的聚合管道对数据进行处理,包括筛选、分组、排序、计算等操作,从而得到需要的结果。 ### 回答2: MongoTemplate.aggregate是Spring Data MongoDB提供的用于执行聚合操作的方法。在MongoDB中,聚合操作用于在集合中进行数据处理和分析,以获得需要的结果。 使用MongoTemplate.aggregate,我们可以使用聚合管道来指定一系列的聚合阶段,以处理从集合中检索到的文档。聚合管道是由一系列阶段组成的,每个阶段都会对输入文档进行处理,并将处理结果传递给下一个阶段,最终生成最终的聚合结果。 聚合阶段可以包括多种操作,如过滤、分组、投影、排序、限制等。我们可以根据具体的需求选择不同的操作来构建聚合管道。 使用MongoTemplate.aggregate方法,我们可以构建一个Aggregation对象,通过调用不同的方法来添加不同的聚合阶段。例如,可以使用match方法来添加过滤阶段,使用group方法来添加分组阶段,使用project方法来添加投影阶段等。 最后,调用MongoTemplate.aggregate的结果会返回一个聚合操作的结果。可以使用聚合操作的结果来进行相关的数据分析和处理。 总之,MongoTemplate.aggregate是Spring Data MongoDB提供的一个用于执行聚合操作的方法,通过构建聚合管道,可以对MongoDB集合中的数据进行处理和分析,并获得需要的结果。 ### 回答3: MongoTemplate.aggregate 是Spring Data MongoDB 中的一个函数,用于执行 MongoDB 的聚合操作聚合操作MongoDB 中一种高级数据处理方法,用于在集合中处理数据并返回结果。MongoTemplate.aggregate 函数可以通过传入不同的聚合管道操作,实现对 MongoDB 中的数据进行聚合操作聚合管道是一系列的聚合操作,每个操作都会对输入进行处理,并生成输出结果。管道操作可以包括筛选、排序、分组、计算、转换等多个步骤,可以根据具体需求来组合这些操作MongoTemplate.aggregate 函数的参数包括聚合管道操作和输出结果的类型。聚合管道操作可以使用 Aggregation 类提供的各种操作符,如 match、sort、group、project、limit 等。结果类型可以使用 Class 类型来指定,也可以使用 AggregationResults 类型来获取带有聚合操作结果的包装器。 使用 MongoTemplate.aggregate 函数可以轻松地执行各种聚合操作,同时结合 Spring Data MongoDB 提供的其他功能,还可以更方便地进行数据的查询、更新和删除等操作。 总的来说,MongoTemplate.aggregate 函数是 Spring Data MongoDB 提供的一个方便的接口,用于执行 MongoDB 中的聚合操作,可以通过传入不同的聚合管道操作来实现各种高级数据处理需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值