• MongoDB复杂聚合查询与java中MongoTemplate的api对应


    MongoDB聚合json脚本

    db.getCollection("202303_refund").aggregate([{
        "$match": {
            "courseType": "常规班课",
            "teacherRefundReasonCheck": true,
            "teacherId": {
                "$in": [7544]
            },
            "createTime": "2023-09-08"
        }
    }, {
        "$group": {
            "_id": {
                "subject": "$subject",
                "schoolAreaId": "$schoolAreaId",
                "grade": "$grade",
                "classId": "$classId",
                "isRefund": "$isRefund",
                "teacherId": "$teacherId"
            },
            "subject": {
                "$first": "$subject"
            },
            "schoolAreaId": {
                "$first": "$schoolAreaId"
            },
            "grade": {
                "$first": "$grade"
            },
            "classId": {
                "$first": "$classId"
            },
            "isRefund": {
                "$first": "$isRefund"
            },
            "teacherId": {
                "$first": "$teacherId"
            },
            "refundCount": {
                "$sum": 1
            }
        }
    }, {
        "$project": {
            "_id": 0,
            "subject": 1,
            "schoolAreaId": 1,
            "grade": 1,
            "classId": 1,
            "refundCount": 1,
            "teacherId": 1,
            "isRefund": {
                "$ifNull": ["$isRefund", 0]
            }
        }
    }])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

    MongoTemplate的API

    Aggregation aggregation = Aggregation.newAggregation(
                    Aggregation.match(new Criteria("courseType").is("常规班课")
                            .and("teacherRefundReasonCheck").is(true)
                            .and("teacherId").in(Sets.newHashSet(7544))
                            .and("createTime").is("2023-09-08")
                    ),
                    Aggregation.group("subject","schoolAreaId","grade","classId","isRefund","teacherId")
                            .first("subject").as("subject")
                            .first("schoolAreaId").as("schoolAreaId")
                            .first("grade").as("grade")
                            .first("classId").as("classId")
                            .first("isRefund").as("isRefund")
                            .first("teacherId").as("teacherId")
                            .count().as("refundCount"),
                    Aggregation.project("subject","schoolAreaId","grade","classId",
                            "refundCount","teacherId","isRefund")
            );
            Iterator<RefundResult> iterator = mongoTemplate.aggregate(aggregation, "202303_refund",
                    RefundResult.class)
                    .iterator();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 相关阅读:
    ARP安全综合功能示例
    爆破神器 Hydra 的使用
    深入浅出 MyBatis 的一级、二级缓存机制
    高等数学(第七版)同济大学 习题5-4 个人解答
    【Java多线程JUC入门详解】Atomic原子类、LongAdder源码详解
    2023/9/13 -- C++/QT
    YOLOv5分类任务——手势识别
    如何利用Web应用防火墙应对未知威胁
    Go基础17-明确哪些函数可以作为deferred函数?
    夯实c语言基础
  • 原文地址:https://blog.csdn.net/u012228523/article/details/132758928