mongodb聚合模板Aggregation

Date today=DateFormat.S2DD(DateFormat.D2S(new Date())+" 00:00:00");
        Criteria criteria=Criteria.where("teamId").is(bean.getTeamId()).
                and("updateTime").gte(today);
        String[] strings=bean.getMachineIds().split(",");
        criteria = criteria.and("machineId").in(Arrays.asList(strings));

        GroupOperation groupSum = Aggregation.group("$machineId","$updateTime")
                .first("machineName").as("machineName")
                .first("actPowTotal").as("actPowTotal")
                .first("machineId").as("machineId")
                .first("updateTime").as("updateTime");

        String formate = "%Y-%m-%d %H:%M:00";
        //日期按照 “%Y-%m-%d %H:%M:00”格式化,并变成字符串
        AggregationExpression dateExpression = DateOperators.DateToString
                .dateOf("updateTime")
                .toString(formate)
                .withTimezone(
                        DateOperators.Timezone.valueOf("+08")
                );
        String formate1 = "%Y-%m-%d %H:%M:%S";
        //日期按照 “%Y-%m-%d %H:%M:00”格式化,并变成字符串
        AggregationExpression dateExpression1 = DateOperators.DateToString
                .dateOf("updateTime")
                .toString(formate1)
                .withTimezone(
                        DateOperators.Timezone.valueOf("+08")
                );
        ProjectionOperation pro = Aggregation.project("machineId","updateTime","machineName","actPowTotal")
                .and(dateExpression).as("minterTime")
                .and(dateExpression1).as("updateTime");

        GroupOperation group = Aggregation.group("$machineId","$minterTime")
                .first("updateTime").as("updateTime")
                .first("actPowTotal").as("actPowTotal")
                .first("machineName").as("machineName")
                .first("machineId").as("machineId")
                .first("minterTime").as("minterTime");

        AggregationOptions aggregationOptions = AggregationOptions.builder().allowDiskUse(true).build();
        Aggregation aggregation =  Aggregation.newAggregation(
                Aggregation.match(criteria)
                ,groupSum
                ,pro
                ,group
                ,Aggregation.sort(Sort.Direction.ASC,"machineId")
        ).withOptions(aggregationOptions);

        AggregationResults<Map> aggregate = mongoTemplate.aggregate(aggregation, "data_run_zero", Map.class);
        List<Map> mappedResults = aggregate.getMappedResults();

你可能感兴趣的:(工具,java)