You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MongoDB聚合框架分组后无法获取Region、Theatre字段值如何解决

问题分析与解决方案

问题原因

  • 部分文档不存在Enrichment嵌套字段,或是Enrichment.Region、Enrichment.Theatre字段为空、未定义
  • 少部分场景下可能存在线上实际文档的字段名拼写、大小写和测试文档不一致的问题,可先做基础字段校验

方案1:过滤无Enrichment信息的文档(推荐,保证统计结果有效性)

在原聚合语句最前面新增$match阶段,提前过滤不符合要求的文档,修改后完整语句如下:

db.getCollection('collection2').aggregate([
    // 新增过滤阶段,仅保留存在有效区域、战区字段的文档
    {
        "$match": {
            "Enrichment.Region": {"$exists": true, "$ne": null},
            "Enrichment.Theatre": {"$exists": true, "$ne": null}
        }
    },
    {
        "$group":{
            "_id": {
                "Region": "$Enrichment.Region",
                "Theatre": "$Enrichment.Theatre",
                "Customer": "$Project",
                "Test Type": "$Test_Type",
                "Test Sub-type": "$Type",
                "Method": "$Method",
                "Quarter": "$Quarter"
            },
            "TC Passed": {"$sum": "$TC_Passed"},
            "Defects": {"$sum":"$Defects"},
            "TC Failed": {"$sum": "$TC_Failed"},
            "TC Blocked": {"$sum": "$TC_Blocked"}

        }
    },
    {
        "$project": {
            "Region": "$_id.Region",
            "Theatre": "$_id.Theatre",
            "Customer": "$_id.Customer",
            "Test Type": "$_id.Test Type",
            "Test Sub-type": "$_id.Test Sub-type",
            "Method": "$_id.Method",
            "Quarter": "$_id.Quarter",
            "Defects" : "$Defects",
            "TC Passed" : "$TC Passed",
            "TC Failed" : "$TC Failed",
            "TC Blocked" : "$TC Blocked",
            "_id":0
        }
    }
])

方案2:保留所有文档,为空字段设置默认值

如果需要统计所有文档,哪怕没有区域、战区信息,可以在$group阶段用$ifNull设置默认值,仅需要修改_id中对应字段的取值逻辑即可:

"_id": {
    "Region": {"$ifNull": ["$Enrichment.Region", "未知区域"]},
    "Theatre": {"$ifNull": ["$Enrichment.Theatre", "未知战区"]},
    // 剩余分组字段保持原有逻辑不变
    "Customer": "$Project",
    "Test Type": "$Test_Type",
    "Test Sub-type": "$Type",
    "Method": "$Method",
    "Quarter": "$Quarter"
}

校验方法

如果修改后还是无法返回对应字段,可以先执行简单查询验证实际文档的字段情况:
db.collection2.find({"Enrichment.Region": {"$exists": true}}).limit(10)
检查返回的文档中是否存在正确的Enrichment嵌套字段。

内容的提问来源于stack exchange,提问作者subhra_user

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 15:15:00