mongodb中AggregationOptions以10分钟为间隔获取数据

Date today= DateFormat.S2DD("2022-04-06 00:00:00");
        Criteria criteria=Criteria.where("teamId").is("89999").
                and("updateTime").gte(today);

        /**
         * 防止出现同一条数据
         */
        GroupOperation groupSum = Aggregation.group("$machineId","$updateTime")
                .first("machineName").as("machineName")
                .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)
                ;


        ProjectionOperation pro = Aggregation.project("machineId","machineName")
                .and(dateExpression).as("minterTime")//1分钟
                .and("updateTime").substring(0,15).as("tenMinTime");//10分钟

        GroupOperation group = Aggregation.group("$tenMinTime")
               // .first("updateTime").as("updateTime")
                .first("machineName").as("machineName")
                .first("machineId").as("machineId")
                .first("tenMinTime").as("tenMinTime");

        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)