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();
相关推荐
qZ6bgMe436 分钟前
使用Mixin类简单重构配置模块
网络·python·重构
巧妹儿7 分钟前
AI Agent 实战:MySQL 监控指标查询 Skill|华为云 + 腾讯云双兼容可直接复用
python·mysql·ai·大模型·华为云·腾讯云
Zww089111 分钟前
idea配置注释模板
java·ide·intellij-idea
Renhao-Wan13 分钟前
Docker 核心原理详解:镜像、容器、Namespace、Cgroups 与 UnionFS
java·后端·docker·容器
Rsun0455120 分钟前
ScheduledExecutorService类作用
java
小钊(求职中)27 分钟前
算法知识、常用方法总结
java·算法·排序算法·力扣
萧逸才31 分钟前
【learn-claude-code】S07TaskSystem - 任务系统:大目标拆成小任务,持久化到磁盘
java·人工智能·ai
ZC跨境爬虫43 分钟前
免费验证码识别:用ddddocr实现Playwright自动化登录
爬虫·python·自动化
Rsun045511 小时前
MessageUtils.message(“user.jcaptcha.expire“)
java
数据知道1 小时前
claw-code 源码详细分析:子系统目录地图——几十个顶层包如何用五条轴(会话 / 工具 / 扩展 / 入口 / 桥接)读懂?
服务器·python·ai·claude code