如何使用MongoDB聚合管道提取子文档的指定字段值到数组?
MongoDB聚合管道提取tier字段为数组的解决方案
针对你的需求——从customer集合中提取tier_and_details下所有子文档的tier值组成数组,可以通过MongoDB聚合管道的$objectToArray和$map操作符实现,具体方案如下:
聚合管道代码
db.customer.aggregate([ { $project: { _id: 0, tiers: { $map: { input: { $objectToArray: "$tier_and_details" }, as: "entry", in: "$$entry.v.tier" } } } } ])
步骤解析
$objectToArray转换对象为数组
由于tier_and_details的键是动态生成的字符串(如c06d340a4bad42c59e3b6665571d2907),无法直接通过固定路径遍历,使用$objectToArray会将该对象转换为[{k: "键名", v: 子文档}, ...]格式的数组,让我们能统一处理每个子文档。$map提取tier值
遍历转换后的数组,通过$$entry.v获取每个子文档,再提取其中的tier字段值,最终生成目标数组。$project过滤输出字段
仅保留生成的tiers数组,排除_id及其他无关字段,得到干净的结果。
执行结果
运行上述聚合命令后,将得到预期输出:
["Platinum","Bronze","Gold"]
内容的提问来源于stack exchange,提问作者Xin Zhang
相关产品推荐
相关产品推荐

