MongoDB聚合嵌套数组字段返回null问题求助
问题分析与解决
错误原因
你的聚合查询返回null是因为**$getField无法解析嵌套数组的字段路径**,且错误使用了$literal:
- $getField仅能获取文档的顶级字段,无法处理
am.one这种嵌套数组的路径; - $literal将
"am.one"作为字符串字面量传递,而非字段路径,MongoDB找不到名为"am.one"的顶级字段,因此返回null,最终所有文档被合并到同一个分组中。
修正后的聚合查询
根据你期望的结果格式(按指定字段分组并生成聚合字段),以下是正确的写法:
方法1:直接引用数组元素路径
db.collection.aggregate([ { $group: { _id: "$am.0.one", // 取am数组第一个元素的one字段值作为分组键 totalQty: { $sum: "$qty" } // 示例聚合字段,可替换为你需要的计算逻辑 } } ])
方法2:使用$arrayElemAt提取数组元素
如果数组长度不固定,用$arrayElemAt更清晰:
db.collection.aggregate([ { $group: { _id: { $arrayElemAt: ["$am.one", 0] }, // 提取am数组中所有元素的one字段,再取第一个值 totalQty: { $sum: "$qty" } } } ])
执行结果
运行上述查询后,会得到符合你期望格式的结果:
[ { "_id": 100, "totalQty": 300 }, { "_id": 50, "totalQty": 200 }, { "_id": 10, "totalQty": 250 } ]
你可以根据实际需求修改totalQty对应的聚合逻辑(比如$avg、$max等),替换成你需要的anotherThing字段。
内容的提问来源于stack exchange,提问作者King
相关产品推荐
相关产品推荐

