MongoDB查询嵌入式文档指定值且不返回父级文档结构
你之前的写法存在两个问题:一是过滤条件错误,qty是people数组内的嵌套字段,过滤时要写全路径people.qty;二是普通find查询只能保留原有文档结构,无法把数组内的元素拆分为独立的顶层文档,也无法将嵌套字段提取到根层级,因此需要使用MongoDB聚合管道实现,完整查询语句如下:
db.collection.aggregate([ // 第一步:过滤出包含people.qty为"5"的父文档,减少后续处理数据量 { $match: { "people.qty": "5" } }, // 第二步:拆分people数组,每个数组元素对应生成一条独立文档 { $unwind: "$people" }, // 第三步:过滤拆分后qty不等于"5"的无效文档 { $match: { "people.qty": "5" } }, // 第四步:指定返回字段,将嵌套的id、qty提升到根层级,去除不需要的字段 { $project: { _id: 0, name: 1, id: "$people.id", qty: "$people.qty" } } ])
执行上述语句即可得到你期望的输出结果。
内容的提问来源于stack exchange,提问作者KengoL
相关产品推荐
相关产品推荐

