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

MongoDB聚合$group阶段如何为$addToSet添加条件判断

解决方案

完全可以直接在$group阶段实现该需求,不需要额外新增独立的聚合过滤阶段。

实现逻辑非常简单:在$addToSet的取值表达式中加入$cond条件判断,不符合age=20要求时传入系统变量$$REMOVE即可——$addToSet运算符遇到$$REMOVE时会自动跳过当前值,不会向结果集合中写入任何内容。

修改后的聚合代码如下:

{
  $group: {
    _id: {
      bins: {
        $dateTrunc: {
          date: '$timestamp',
          unit: 'week',
          binSize: 1
        }
      }
    },
    'NamesWithAge20': {
      $addToSet: {
        $cond: {
          if: { $eq: ['$age', 20] },
          then: '$name',
          else: '$$REMOVE'
        }
      }
    }
  }
}

用你提供的两个测试文档运行上述代码,最终NamesWithAge20集合中只会存在Max,age为21的Brian不会被加入集合,完全符合你的需求。

如果你的聚合任务不需要保留age不等于20的文档做其他指标统计,也可以在$group阶段前增加$match: {age: 20}过滤条件,能减少后续阶段处理的数据量,提升聚合运行效率;如果同分组下还需要计算其他年龄段的相关聚合值,直接使用上面的$group内条件判断写法即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 02:48:32