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

MongoDB多级嵌套数组筛选:提取符合指定paymentType与limits条件的文档

MongoDB查询实现方案

实现思路

  • 采用MongoDB聚合框架完成两层嵌套数组的过滤操作
  • 先过滤外层paymentTypes数组,仅保留type为PILOT的元素,减少后续遍历数据量
  • 再对筛选出的PILOT元素,过滤其内部limits数组,仅保留type为COMBAT_HOURS的项

完整查询语句

db.collection.aggregate([
  // 可选:仅需查询特定用户时保留该阶段,全量查询可删除
  {
    $match: {
      user: "CHEWBACCA"
    }
  },
  // 重写paymentTypes字段,保留其他原始字段
  {
    $project: {
      user: 1,
      createdDate: 1,
      paymentTypes: {
        $map: {
          // 第一层过滤:筛选paymentTypes中PILOT类型的元素
          input: {
            $filter: {
              input: "$paymentTypes",
              as: "pt",
              cond: { $eq: ["$$pt.type", "PILOT"] }
            }
          },
          as: "pilotPt",
          in: {
            type: "$$pilotPt.type",
            limits: {
              // 第二层过滤:筛选limits中COMBAT_HOURS类型的项
              $filter: {
                input: "$$pilotPt.limits",
                as: "limit",
                cond: { $eq: ["$$limit.type", "COMBAT_HOURS"] }
              }
            }
          }
        }
      }
    }
  }
])

语法说明

  • $filter操作符用于按照指定条件过滤数组,返回符合条件的元素集合
  • $map操作符用于遍历数组元素,对每个元素做自定义处理后返回新数组
  • $project阶段默认保留原始文档_id字段,显式指定保留user、createdDate字段,最终返回结构和你预期的结果完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:15:05