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

如何在MongoDB聚合的$group中结合$regex实现分组统计?

解决方案:MongoDB分组统计名字含"ava"的人数

方案一:一次性统计两类人数(返回单个结果文档)

使用$regexMatch聚合操作符判断名字是否匹配,配合$cond和$sum完成分组计数:

db.contact.aggregate([
  {
    $group: {
      _id: null, // 统一分组到一个结果中
      含ava人数: {
        $sum: {
          $cond: [
            { $regexMatch: { input: "$name", regex: /ava/i } }, // 判断是否匹配不区分大小写的ava
            1, // 匹配则加1
            0 // 不匹配则加0
          ]
        }
      },
      不含ava人数: {
        $sum: {
          $cond: [
            { $regexMatch: { input: "$name", regex: /ava/i } },
            0,
            1
          ]
        }
      }
    }
  }
])

执行后会返回一个文档,直接给出两类人数的统计结果。

方案二:按匹配状态分组(返回两个结果文档)

先通过$addFields给每个文档添加匹配标记,再按标记分组统计:

db.contact.aggregate([
  {
    $addFields: {
      包含ava: { $regexMatch: { input: "$name", regex: /ava/i } }
    }
  },
  {
    $group: {
      _id: "$包含ava", // 按是否包含ava分组
      人数: { $sum: 1 }
    }
  }
])

执行后会返回两个文档,分别对应_id: true(含ava)和_id: false(不含ava)的人数统计。

你之前代码的问题

$group阶段的语法不符合MongoDB聚合规则:你不能直接在$group的字段中写查询用的$regex,必须使用聚合阶段的操作符(比如$regexMatch)来实现条件判断,再结合聚合表达式完成计数逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 12:33:11