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

MongoDB聚合json脚本

bash 复制代码
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]
        }
    }
}])

MongoTemplate的API

java 复制代码
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 小时前
【Android逆向工程】第3章:Java 字节码与 Smali 语法基础
android·java·安卓逆向
毕设源码-朱学姐6 小时前
【开题答辩全过程】以 工厂能耗分析平台的设计与实现为例,包含答辩的问题和答案
java·vue.js
码界奇点7 小时前
Python从0到100一站式学习路线图与实战指南
开发语言·python·学习·青少年编程·贴图
Spring AI学习8 小时前
Spring AI深度解析(9/50):可观测性与监控体系实战
java·人工智能·spring
Laravel技术社区8 小时前
pytesseract 中英文 识别图片文字
python
java1234_小锋9 小时前
Spring IoC的实现机制是什么?
java·后端·spring
生骨大头菜9 小时前
使用python实现相似图片搜索功能,并接入springcloud
开发语言·python·spring cloud·微服务
绝不收费—免费看不了了联系我9 小时前
Fastapi的单进程响应问题 和 解决方法
开发语言·后端·python·fastapi
xqqxqxxq9 小时前
背单词软件技术笔记(V2.0扩展版)
java·笔记·python
消失的旧时光-19439 小时前
深入理解 Java 线程池(二):ThreadPoolExecutor 执行流程 + 运行状态 + ctl 原理全解析
java·开发语言