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

MongoDB使用$size运算符时能否添加子文档匹配条件?

错误原因

$size运算符仅支持传入数组类型参数,直接返回数组的总元素数,不支持内嵌筛选条件过滤数组元素。你尝试在$size参数中为$likes指定匹配条件的写法不符合MongoDB聚合表达式语法,因此触发报错。

正确实现方案

你可以先通过$filter运算符筛选出likes数组中like为true的元素,再用$size统计筛选后数组的长度即可,写法如下:

'$set': {
  'likeCount': {
    $size: {
      $filter: {
        input: '$likes',
        cond: { $eq: ['$$this.like', true] }
      }
    }
  }
}

参数说明

  • input:指定要遍历筛选的数组,这里对应文档的likes字段
  • cond:定义数组元素的匹配规则,其中$$this指代遍历过程中当前的子文档,当前规则为子文档的like字段值等于true
  • 筛选完成后会生成仅包含符合条件元素的新数组,$size统计该数组长度即可得到符合要求的元素数量

兼容写法(可选)

如果你使用的是MongoDB 3.2+版本,也可以通过$sum结合条件判断实现同等效果:

'$set': {
  'likeCount': {
    $sum: {
      $map: {
        input: '$likes',
        in: {
          $cond: [{ $eq: ['$$this.like', true] }, 1, 0]
        }
      }
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:57:03