You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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] }
              }
            }
          }
        }
      }
    }
  }
])

操作逻辑说明:

  1. $set字段重赋值:仅修改nestedList字段,文档中其他原始字段(如_id、outerDucumentName)会自动保留,无需额外处理。
  2. $map遍历外层数组:逐个处理nestedList中的每个外层嵌套文档,通过...$$outerItem保留该文档的所有原始属性(如nestedId)。
  3. $filter过滤内层数组:针对每个外层文档的nestedNestedList数组,只保留nestedType不等于2的元素,直接剔除目标嵌套文档。

执行该管道后,即可得到你期望的结果:所有原始文档和字段完整保留,仅移除了nestedType=2的二级嵌套元素。

之前使用$unwind的问题在于会将数组拆分为多个独立文档,后续重组时容易破坏原始层级结构,而上述方法直接在数组层面完成过滤,完全保留文档的原始嵌套关系。

内容的提问来源于stack exchange,提问作者AlexH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 04:25:41