MongoDB聚合查询:基于嵌套数组条件提取指定对象
MongoDB聚合查询实现指定条件提取
针对你提供的集合结构,要提取满足list1._id = "54"和list2.lang = "IT"的{"id": "54", "value": "val3"},可以使用以下聚合管道:
db.collection.aggregate([ // 展开list1数组,将每个元素转为独立文档 { $unwind: "$list1" }, // 筛选出list1._id为"54"的文档 { $match: { "list1._id": "54" } }, // 展开list2数组,处理内部语言条目 { $unwind: "$list1.list2" }, // 筛选出lang为"IT"的条目 { $match: { "list1.list2.lang": "IT" } }, // 构造目标输出结构 { $project: { _id: 0, id: "$list1._id", value: "$list1.list2.value" } } ])
步骤说明:
- $unwind: 先展开外层的
list1数组,让每个list1元素成为单独的文档,方便后续匹配。 - $match: 过滤出
list1._id等于"54"的文档,缩小处理范围。 - $unwind: 展开当前文档的
list2数组,让每个语言条目独立出来。 - $match: 进一步筛选出
lang为"IT"的条目。 - $project: 重新定义输出字段,将
list1._id重命名为id,提取list2.value,同时排除默认的_id字段。
执行上述聚合查询后,就能得到你需要的结果:
{ "id": "54", "value": "val3" }
内容的提问来源于stack exchange,提问作者DrDray
相关产品推荐
相关产品推荐

