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

MongoDB使用$size统计嵌套数组,路径不存在时返回0而非报错

解决MongoDB $size操作符对缺失路径报错的问题

这个问题我之前也碰到过,MongoDB的$size确实对缺失路径很严格,不过有两个简单的方法可以让totalRevisions在路径不存在时返回0,而不是抛出异常:

方法一:使用$ifNull兜底为空数组

$ifNull操作符会检查第一个表达式的结果,如果是null或者路径缺失(missing),就返回第二个参数作为默认值。我们可以把默认值设为空数组,这样$size统计空数组就会返回0,完美避开报错。

修改后的代码如下:

totalRevisions: { $size: { $ifNull: [`$revisions.${entryId}.${languageId}`, []] } }

方法二:使用$cond判断类型后分支处理

如果想更明确地判断目标路径是否为数组,可以用$cond结合$type操作符:先检查目标路径的类型是不是数组,是就用$size统计,否则直接返回0。

代码示例:

totalRevisions: {
  $cond: {
    if: { $eq: [{ $type: `$revisions.${entryId}.${languageId}` }, 'array'] },
    then: { $size: `$revisions.${entryId}.${languageId}` },
    else: 0
  }
}

这两种方法都适配你提供的嵌套数据结构(project.revisions是对象,下一级是entryId,再下一级是languageId对应修订记录数组),无论目标路径是否存在,都能正常返回统计结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:06:35