zoukankan      html  css  js  c++  java
  • mongodb聚合查询

    List<String> planIds = planMapper.selectAllStartPlanId(null);
            List<AggregationOperation> operations = new ArrayList<>();
            operations.add(Aggregation.match(Criteria.where("planId").in(planIds).and("attendenceTime").lte(now)));
            operations.add(Aggregation.group("userId","planId")
                    .max("attendenceTime").as("attendenceTime").first("memberId").as("studentId").first("planId").as("planId")
                    .first("memberNumber").as("studentNumber").first("username").as("studentName")
                  .first("schoolId").as("schoolId") .first("address").as("lastAttendenceAddress").first("orgEntity.className").as("className").
                    first("orgEntity.depId").as("depId").first("orgEntity.depName").as("depName")
    
            );
            long currPage = 0,pageSize=5000;
            operations.add(Aggregation.sort(Sort.Direction.DESC, "attendenceTime"));
    //        operations.add(Aggregation.skip(currPage*pageSize));
    //        operations.add(Aggregation.limit(pageSize));
            Aggregation aggregation = Aggregation.newAggregation(operations);
            AggregationResults<GxyWarnEntity> g = template.aggregate(aggregation, MongoMoguAttendenceDto.class);
    
            //mongodb考勤中存在的数据
            List<GxyWarnEntity> unSignins = g.getMappedResults();

    Executing aggregation: [ { "$match" : { "planId" : { "$in" : [ "176715c10b0960b161c6181e0532e779" , "3ffb1d4e001135129ede50d1678e5769" , "496af0ea0bdb2b93cc0c37618e0164d8" , "5274d63c8118b5918ae920b8b7ee934c" , "6d2addfc568480c3885b24dd95dba625" , "71b51a042312f3f79d02b7aa8d037829" , "7a5cb250a1024ba69f4d9cec1bdf0d55" , "9b18ecad83517b50510b05891ba9b03d" , "a2f684015bbb8ce4dec986b898213e01" , "b60ae3e53fc64d41b7ff8f3b2dc4be23" , "bb415eb63ed180a3c5429db733916aca" , "bc94d68734b804d3202ff7aafc2de913" , "bcfe591d84295d5354c2db76e107e3ad" , "c6477c9a99df81a9c706354d4833f73e" , "cbf55d8d12ad49c93e84101ad58fb89e" , "cc234b70807bb9d1ec7994760f6b6082" , "d1f133cd90bb392fd3e06745c31b8be3" , "d6d9d190d8d2c9a92dca48c2343bc1eb" , "db6921794544332510c322c748cf9a39" , "de372c4f38172841bad23d34090643a3" , "df7abbd3434ecdb4604554d400b9071d" , "e5916f5bfc580e7a0358195f76778f07" , "e683132a2fd4f06065b02e08eb457506" , "f077795af34b7fa924103f3dc8cbef40" , "f8cc095f62eddcf08aba2141604e8c66" , "f9a5542a4cbde051de19cb3e43443165" , "fc10da03eb1ea8f107ef2717cdd1bb07"]} , "attendenceTime" : { "$lte" : { "$date" : "2019-10-08T06:51:36.503Z"}}}} , { "$group" : { "_id" : { "userId" : "$userId" , "planId" : "$planId"} , "attendenceTime" : { "$max" : "$attendenceTime"} , "studentId" : { "$first" : "$memberId"} , "planId" : { "$first" : "$planId"} , "studentNumber" : { "$first" : "$memberNumber"} , "studentName" : { "$first" : "$username"} , "schoolId" : { "$first" : "$schoolId"} , "lastAttendenceAddress" : { "$first" : "$address"} , "className" : { "$first" : "$orgEntity.className"} , "depId" : { "$first" : "$orgEntity.depId"} , "depName" : { "$first" : "$orgEntity.depName"}}} , { "$sort" : { "attendenceTime" : -1}}] in collection mogu_attendance

    查询分组后的组数:

    List<String> planIds = planMapper.selectAllStartPlanId(null);
    Criteria criteria = Criteria.where("planId").in(planIds).and("attendenceTime").lte(now);
    
            //第一个userId,planId分组
            GroupOperation group = Aggregation.group("userId", "planId");
            //第二个统计分组后的组数
            CountOperation count = Aggregation.count().as("total");
            Aggregation agg = Aggregation.newAggregation(Aggregation.match(criteria), group, count);
    
            GxyWarnEntity result = template.aggregate(agg, "mogu_attendance", GxyWarnEntity.class).getUniqueMappedResult();
    //        List<GxyWarnEntity> result = template.aggregate(agg, "mogu_attendance", GxyWarnEntity.class).getMappedResults();
            logger.info("---------result---------" + result.getTotal());

    查询 mogu_attendance 集合中的  planId 在  List<String> planIds  中的记录,然后根据  "userId", "planId" 两个字段分组, 分组后统计组数。 把 组数 total 映射到  GxyWarnEntity 类的 

    private int total; 字段中。
    查询日志:
    [ { "$match" : { "planId" : { "$in" : [ "176715c10b0960b161c6181e0532e779" , "237f6686e03eb5e6a89fa62de931f408"]} , "attendenceTime" : { "$lte" : { "$date" : "2019-10-16T06:53:46.386Z"}}}} , { "$group" : { "_id" : { "userId" : "$userId" , "planId" : "$planId"}}} , { "$count" : "total"}] in collection mogu_attendance
  • 相关阅读:
    静态工具类中使用注解注入service
    赵伟国:芯片不像互联网 不能一招鲜吃遍天(发展芯片制造业已拥有三个纵深:市场纵深、资本纵深、人才纵深)
    将grub写入mbr
    Linux下Qt5.6 Fcitx无法输入中文输入解决办法
    为 Mac Finder 增加右键文件打包压缩(免费)
    Obtaining Directory Change Notifications(微软的例子,使用FindFirstChangeNotification,FindNextChangeNotification,FindCloseChangeNotification API函数)
    C#开发Linux守护进程
    排序算法比较与分析
    Mvc+Dapper+存储过程分页10万条数据
    RabbitMQ
  • 原文地址:https://www.cnblogs.com/z360519549/p/11636824.html
Copyright © 2011-2022 走看看