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();
相关推荐
卷无止境3 小时前
智能体开发环境ADE浅析,编程工具的下一次范式跃迁
后端·python
IT_Octopus5 小时前
IntelliJ 本地日志路径自定义:`-DLOG_PATH=./logs` 为什么总“不听话“
java·log4j·intellij-idea
长征coder6 小时前
【无标题】
java·性能优化
新时代牛马6 小时前
PCI与PCIe 硬件原理、配置空间/BAR 与 Linux 驱动完整篇:从 LTSSM、TLP 到 ECAM 与probe
java·linux·服务器
2601_962300817 小时前
机器学习贴士:使用Python编写MapReduce
hadoop·python·机器学习·mapreduce·数据处理
Bs_MoneyMagnet7 小时前
基于springboot+vue的医疗健康便民服务平台的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring
xyz_CDragon7 小时前
GitHub上4个爆款AI开源Skill:拍照后不用P图,用Codex一键生成高级海报(附效果图+使用教程)
人工智能·python·github·codex·skill
weixin199701080167 小时前
[特殊字符]《跨境二手ERP对接Back Market:标准化API + 7~10工作日技术合规审核实录》(附Python源码)
开发语言·python·pandas
sunshine22 girl7 小时前
Java学习一 环境配置2 Idea的入门使用和maven配置,项目启动脚本配置
java·maven
持敬chijing8 小时前
Python-数据类型-列表
开发语言·python·青少年编程