MongoDB集合中二级嵌套列表过滤方案咨询
MongoDB 过滤二级嵌套列表(保留原始文档结构)
要实现保留所有原始字段和文档,仅移除nestedType=2的二级嵌套元素,无需使用会破坏文档结构的$unwind,直接用$set+$map+$filter的组合即可完成,完整聚合管道如下:
db.collection.aggregate([ { $set: { "nestedList": { $map: { input: "$nestedList", as: "outerItem", in: { // 保留外层嵌套文档的所有原始字段 ..."$$outerItem", // 过滤内层嵌套数组,移除nestedType=2的元素 "nestedNestedList": { $filter: { input: "$$outerItem.nestedNestedList", as: "innerItem", cond: { $ne: ["$$innerItem.nestedType", 2] } } } } } } } } ])
操作逻辑说明:
$set字段重赋值:仅修改nestedList字段,文档中其他原始字段(如_id、outerDucumentName)会自动保留,无需额外处理。$map遍历外层数组:逐个处理nestedList中的每个外层嵌套文档,通过...$$outerItem保留该文档的所有原始属性(如nestedId)。$filter过滤内层数组:针对每个外层文档的nestedNestedList数组,只保留nestedType不等于2的元素,直接剔除目标嵌套文档。
执行该管道后,即可得到你期望的结果:所有原始文档和字段完整保留,仅移除了nestedType=2的二级嵌套元素。
之前使用$unwind的问题在于会将数组拆分为多个独立文档,后续重组时容易破坏原始层级结构,而上述方法直接在数组层面完成过滤,完全保留文档的原始嵌套关系。
内容的提问来源于stack exchange,提问作者AlexH
相关产品推荐
相关产品推荐

