MongoDB多层嵌套数组:如何提取符合指定条件的关联字段
MongoDB多层嵌套数组提取目标字段解决方案
需求说明
从多层嵌套数组文档中,仅筛选_a._p._pubId.CC = "EN"的条目,提取其对应的_prid以及s下c和d中所有text.secId,输出格式为包含_prid和secId的对象列表。
示例文档
[ { _id: 1, "_a": [ { "_p": [ { _pubId: { "CC": "EN" }, _prid: "2", s: { c: { text: [{ secId: "4" }, { secId: "5" }] }, d: { text: [{ secId: "6" }, { secId: "7" }] } } }, { _pubId: { "CC": "CZ" }, _prid: "4", s: { c: { text: [{ secId: "8" }, { secId: "9" }] } } } ] }, { "_p": [ { _pubId: { "CC": "CZ" }, _prid: "200", s: { c: { text: [{ secId: "4" }, { secId: "5" }] }, d: { text: [{ secId: "6" }, { secId: "7" }] } } }, { _pubId: { "CC": "BG" }, _prid: "4", s: { c: { text: [{ secId: "8" }, { secId: "9" }] } } } ] } ] } ]
聚合查询代码
db.collection.aggregate([ // 展开外层_a数组 { $unwind: "$_a" }, // 展开_a下的_p数组 { $unwind: "$_a._p" }, // 过滤出pubId.CC为EN的条目 { $match: { "_a._p._pubId.CC": "EN" } }, // 将s下的c.text和d.text合并为一个数组,同时保留prid { $project: { _id: 0, _prid: "$_a._p._prid", secIds: { $concatArrays: [ "$_a._p.s.c.text", { $ifNull: ["$_a._p.s.d.text", []] } // 兼容d字段不存在的场景 ] } } }, // 展开合并后的secIds数组 { $unwind: "$secIds" }, // 整理成目标输出格式 { $project: { _prid: 1, secId: "$secIds.secId" } } ])
查询结果
{ "_prid" : "2", "secId" : "4" } { "_prid" : "2", "secId" : "5" } { "_prid" : "2", "secId" : "6" } { "_prid" : "2", "secId" : "7" }
内容的提问来源于stack exchange,提问作者R2D2
相关产品推荐
相关产品推荐

