如何返回MongoDB文档中数组内所有元素的指定属性?
MongoDB聚合管道提取数组指定字段方案
要从用户文档的trips数组中提取每个元素的title和_id,用聚合管道可以这么实现:
基础实现(返回目标格式的文档列表)
直接拆分数组并筛选字段,返回结果就是你想要的结构:
db.users.aggregate([ // 把trips数组拆分为单个元素的独立文档 { $unwind: "$trips" }, // 提取需要的字段并映射到根层级 { $project: { _id: "$trips._id", title: "$trips.title", // 移除原文档的_id(可选,不需要则保留) _id: 0 } } ])
进阶实现(合并为单个数组返回)
如果希望结果打包成一个包含所有元素的数组,加上分组阶段即可:
db.users.aggregate([ { $unwind: "$trips" }, { $project: { _id: "$trips._id", title: "$trips.title", _id: 0 } }, // 将所有结果合并为一个数组 { $group: { _id: null, tripsList: { $push: "$$ROOT" } } }, // 仅输出数组字段 { $project: { _id: 0, tripsList: 1 } } ])
各阶段作用说明
$unwind:将每个用户文档中的trips数组拆分,每个数组元素对应一个新文档$project:筛选并映射字段,把trips子文档内的title和_id提取到根层级$group(可选):将所有拆分后的文档合并成一个数组,方便一次性获取完整结果
内容的提问来源于stack exchange,提问作者benwl
相关产品推荐
相关产品推荐

