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

MongoDB如何将嵌套字段grid.height设为同层级elements数组长度

错误原因

你之前的脚本存在两个核心问题:

  1. 普通更新操作的$set不支持直接使用$size这类聚合操作符读取文档自身的字段值,需要使用MongoDB 4.2及以上版本支持的聚合管道形式更新
  2. 涉及数组元素子字段的动态计算,不能用普通$占位符直接取值,需要遍历数组做针对性修改

修正后可运行脚本

db.myTestdb.updateMany(
  {'model.components.type': "FIXED"},
  [
    {
      $set: {
        "model.components": {
          $map: {
            input: "$model.components",
            as: "comp",
            in: {
              $mergeObjects: [
                "$$comp",
                {
                  grid: {
                    $mergeObjects: [
                      { $ifNull: ["$$comp.grid", {}] },
                      { height: { $size: { $ifNull: ["$$comp.elements", []] } } }
                    ]
                  }
                }
              ]
            }
          }
        }
      }
    }
  ]
)

逻辑说明

  • 外层用数组包裹更新规则,开启聚合管道更新模式,支持用聚合操作符读取文档内的字段值
  • 通过$map遍历model.components数组,逐个处理每个元素:
    • 用$mergeObjects保留组件原有所有字段,仅修改grid部分属性
    • 内层$mergeObjects保留grid已存在的其他字段,仅更新height值
    • 新增$ifNull做兼容处理:如果组件不存在elements字段默认返回空数组,避免$size执行报错;如果组件不存在grid字段默认初始化为空对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 04:06:03