You need to enable JavaScript to run this app. MongoDB聚合:嵌套数组结构下提取number字段最大值的实现方法
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB聚合:嵌套数组结构下提取number字段最大值的实现方法

查询结果不符合预期的核心原因

当前语句返回数组[2,3]而非目标的标量最大值,本质是多层嵌套结构没有被正确扁平化:

  • $lookup生成的inventory_links本身是数组类型,哪怕只匹配到1条inventory文档,也会被自动包装为数组结构
  • 该数组内部嵌套的list字段又是二级数组,直接把$inventory_links.list.data.number传给$max操作符时,MongoDB不会自动穿透多层嵌套提取所有叶子节点的数值,只会把整条路径对应的嵌套数组作为整体参与比较,自然无法得到逐值对比后的最大值。
可落地的正确聚合实现

实现需求的核心逻辑是先把多层嵌套结构里散落的所有number值提取为独立标量集合,再执行最大值计算。这里提供两种适配不同场景的方案:

全版本兼容方案(逐层拆解数组)

通过$unwind逐层拆解嵌套数组,再做聚合对比,所有MongoDB版本均可正常运行:

db.groups.aggregate([
  // 关联inventory集合,保留原有lookup逻辑
  {
    "$lookup": {
      "from": "inventory",
      "localField": "_id",
      "foreignField": "linkedGroup",
      "as": "inventory_links"
    }
  },
  // 拆解lookup生成的inventory_links数组,拆为单个关联文档
  { $unwind: "$inventory_links" },
  // 拆解inventory文档内的list数组,拆为单个列表项
  { $unwind: "$inventory_links.list" },
  // 对所有提取到的number值取最大值
  {
    $group: {
      _id: 1,
      output: {
        $max: "$inventory_links.list.data.number"
      }
    }
  }
])

高性能方案(无冗余拆解,适配MongoDB 4.4+)

通过内存遍历直接提取所有嵌套的number值,不需要$unwind生成大量中间文档,执行效率更高,适合数据量较大的场景:

db.groups.aggregate([
  {
    "$lookup": {
      "from": "inventory",
      "localField": "_id",
      "foreignField": "linkedGroup",
      "as": "inventory_links"
    }
  },
  {
    $project: {
      // 直接在内存中扁平化所有嵌套number值,计算最大值
      output: {
        $max: {
          $reduce: {
            input: {
              $map: {
                input: "$inventory_links",
                as: "inv",
                in: {
                  $map: {
                    input: "$$inv.list",
                    as: "item",
                    in: "$$item.data.number"
                  }
                }
              }
            },
            initialValue: [],
            in: { $concatArrays: ["$$value", "$$this"] }
          }
        }
      }
    }
  }
])

两种方案最终输出结果均为{ "_id": 1, "output": 3 },如果不需要聚合默认生成的_id字段,可以在聚合最后追加{ $project: { _id: 0 } }阶段做过滤。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 21:54:08