mongoDB分组查询

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
完整代码

//根据医院编号 和 科室编号 ,查询排班规则数据
    @Override
    public Map<String, Object> getRuleSchedule(long page, long limit, String hoscode, String depcode) {
        //1 根据医院编号 和 科室编号 查询
        Criteria criteria = Criteria.where("hoscode").is(hoscode).and("depcode").is(depcode);

        //2 根据工作日workDate期进行分组
        Aggregation agg = Aggregation.newAggregation(
                Aggregation.match(criteria),//匹配条件
                Aggregation.group("workDate")//分组字段
                .first("workDate").as("workDate")
                //3 统计号源数量
                .count().as("docCount")
                .sum("reservedNumber").as("reservedNumber")
                .sum("availableNumber").as("availableNumber"),
                //排序
                Aggregation.sort(Sort.Direction.DESC,"workDate"),
                //4 实现分页
                Aggregation.skip((page-1)*limit),
                Aggregation.limit(limit)
        );
        //调用方法,最终执行
        AggregationResults<BookingScheduleRuleVo> aggResults =
                mongoTemplate.aggregate(agg, Schedule.class, BookingScheduleRuleVo.class);
        List<BookingScheduleRuleVo> bookingScheduleRuleVoList = aggResults.getMappedResults();

        //分组查询的总记录数
        Aggregation totalAgg = Aggregation.newAggregation(
                Aggregation.match(criteria),
                Aggregation.group("workDate")
        );
        AggregationResults<BookingScheduleRuleVo> totalAggResults =
                mongoTemplate.aggregate(totalAgg, Schedule.class, BookingScheduleRuleVo.class);
        int total = totalAggResults.getMappedResults().size();

        //把日期对应星期获取
        for(BookingScheduleRuleVo bookingScheduleRuleVo:bookingScheduleRuleVoList) {
            Date workDate = bookingScheduleRuleVo.getWorkDate();
            String dayOfWeek = this.getDayOfWeek(new DateTime(workDate));
            bookingScheduleRuleVo.setDayOfWeek(dayOfWeek);
        }

        //设置最终数据,进行返回
        Map<String, Object> result = new HashMap<>();
        result.put("bookingScheduleRuleList",bookingScheduleRuleVoList);
        result.put("total",total);

        //获取医院名称
        String hosName = hospitalService.getHospName(hoscode);
        //其他基础数据
        Map<String, String> baseMap = new HashMap<>();
        baseMap.put("hosname",hosName);
        result.put("baseMap",baseMap);

        return result;
    }

相关推荐

  1. MongoDB日期查询详解

    2024-05-11 09:08:10       57 阅读
  2. mongodb 基础查询使用

    2024-05-11 09:08:10       36 阅读
  3. MongoDB 多层级查询

    2024-05-11 09:08:10       23 阅读
  4. MongoDB 基本查询语句

    2024-05-11 09:08:10       26 阅读
  5. Mongodb 控制查询返回字段

    2024-05-11 09:08:10       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-11 09:08:10       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-11 09:08:10       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-11 09:08:10       82 阅读
  4. Python语言-面向对象

    2024-05-11 09:08:10       91 阅读

热门阅读

  1. electron 中拦截内嵌页面 beforeunload 的弹窗提示

    2024-05-11 09:08:10       34 阅读
  2. Lua 数字格式化

    2024-05-11 09:08:10       32 阅读
  3. 神经网络的偏见

    2024-05-11 09:08:10       27 阅读
  4. BS架构和CS架构的区别

    2024-05-11 09:08:10       32 阅读
  5. uni-app小知识点记录

    2024-05-11 09:08:10       30 阅读
  6. 【DL】FocalLoss的PyTorch实现

    2024-05-11 09:08:10       32 阅读