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

MongoDB聚合$size操作符字段路径含数字时返回0如何解决?

MongoDB路径含数字字段的数组长度查询解决方案

问题根因

MongoDB解析点分隔的字段路径时,默认会将路径中的数字识别为数组索引,而非字符串类型的字段名。你原写法中的$this.is.the.field.path.0.here会被解析为取path数组的第0个元素的here字段,如果你的path实际是包含键为"0"的对象而非数组,解析结果就为null,$size计算null的长度会固定返回0,就是你遇到的错误情况。

解决方案

方案1:MongoDB 5.0及以上版本(推荐)

使用$getField显式指定要获取的特殊名称字段,避免数字被识别为数组索引:

{
  $project: {
    "alias": {
      $size: {
        $getField: {
          field: "here",
          input: {
            $getField: {
              field: "0",
              input: "$this.is.the.field.path"
            }
          }
        }
      }
    }
  }
}

方案2:兼容MongoDB 4.4及更低版本

通过$objectToArray将对象转为键值对数组,过滤出键为"0"的项后再取对应数组长度:

{
  $project: {
    "alias": {
      $size: {
        $let: {
          vars: {
            zero_item: {
              $first: {
                $filter: {
                  input: {$objectToArray: "$this.is.the.field.path"},
                  cond: {$eq: ["$$this.k", "0"]}
                }
              }
            }
          },
          in: "$$zero_item.v.here"
        }
      }
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 06:24:04