You need to enable JavaScript to run this app. MongoDB如何查询过滤深度未知嵌套数组中指定fieldToFilterBy值的文档
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB如何查询过滤深度未知嵌套数组中指定fieldToFilterBy值的文档

解决方案

方案1:使用自定义JS递归查询(MongoDB 4.4+ 适用,最简洁)

无需修改原有数据结构,自动适配任意嵌套深度,查询语句如下:

// 示例为筛选fieldToFilterBy等于"2"的文档,可自行替换目标值
db.yourCollectionName.find({
  $expr: {
    $function: {
      body: function(categories, target) {
        const check = node => node ? (node.fieldToFilterBy === target || check(node.child)) : false
        return categories.some(check)
      },
      args: ["$categories", "2"],
      lang: "js"
    }
  }
})

方案2:低版本MongoDB兼容方案

如果你的MongoDB版本低于4.4不支持$function,可使用聚合管道预展开所有层级值再筛选:

db.yourCollectionName.aggregate([
  // 临时生成所有层级的fieldToFilterBy数组
  {
    $addFields: {
      _allValues: {
        $reduce: {
          input: "$categories",
          initialValue: [],
          in: {
            $concatArrays: [
              "$$value",
              ["$$this.fieldToFilterBy"],
              { $ifNull: ["$$this.child.fieldToFilterBy", []] },
              { $ifNull: ["$$this.child.child.fieldToFilterBy", []] },
              // 按你业务中可能的最大嵌套深度补充对应行即可,比写多层$or更简洁
            ]
          }
        }
      }
    }
  },
  // 匹配目标值
  { $match: { _allValues: "2" } },
  // 移除临时字段,返回原文档结构
  { $project: { _allValues: 0 } }
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 17:36:03