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

MongoDB聚合查询:如何提取对象列表中的指定字段?

解决方案

你可以通过在$arrayElemAt获取目标数组元素后,直接提取嵌套字段的方式实现需求,同时建议合并两个$match阶段以提升查询效率。

优化后的聚合查询(方式一)

db.Collection_Name.aggregate([
    { 
        $match: { 
            "Field1": "FilterValue1",
            "Field2": "FilterValue2"
        } 
    },
    { 
        $project: { 
            "Field1": 1, 
            "SubFieldB2": { $arrayElemAt: ["$Field5.SubFieldB2", 1] }
        } 
    }
])

优化后的聚合查询(方式二,更直观)

db.Collection_Name.aggregate([
    { 
        $match: { 
            "Field1": "FilterValue1",
            "Field2": "FilterValue2"
        } 
    },
    { 
        $project: { 
            "Field1": 1, 
            "SubFieldB2": { 
                $getField: { 
                    field: "SubFieldB2", 
                    input: { $arrayElemAt: ["$Field5", 1] } 
                } 
            }
        } 
    }
])

关键说明

  • 合并$match阶段:将两个$match合并为一个,MongoDB会在聚合管道早期过滤不符合条件的文档,减少后续阶段处理的数据量,提升查询性能。
  • 字段提取逻辑:
    • 方式一中,"$Field5.SubFieldB2"会先提取数组每个元素的SubFieldB2值形成新数组,再通过$arrayElemAt取索引1的元素(即第二个元素的目标字段值)。
    • 方式二中,先通过$arrayElemAt获取数组的第二个完整元素,再用$getField提取其中的SubFieldB2字段,这种写法更直观,适合字段名包含特殊字符的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:13:21