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

MongoDB中如何统计集合内嵌数组的布尔真值数量并按job分组

问题原因

你原有查询的$cond条件使用了MongoDB查询文档的匹配语法,而非聚合表达式的字段取值判断语法,导致所有展开的labellers元素都被判定为满足条件,最终统计值等于所有展开后的数组元素总数量(你的示例里就是4条),不符合预期。

正确聚合查询(基于原有写法修正)
db.collection.aggregate([
  {
    $unwind: "$labellers"
  },
  {
    $group: {
      _id: "$job",
      count: {
        $sum: {
          $cond: [
            { $eq: ["$labellers.completed", true] },
            1,
            0
          ]
        }
      }
    }
  }
])
更优写法(无需$unwind,性能更高)

如果集合数据量较大,推荐用$filter+$size的组合先单文档统计符合条件的标注数,再分组求和,避免数组展开带来的性能损耗:

db.collection.aggregate([
  {
    $addFields: {
      completedCount: {
        $size: {
          $filter: {
            input: "$labellers",
            cond: { $eq: ["$$this.completed", true] }
          }
        }
      }
    }
  },
  {
    $group: {
      _id: "$job",
      count: { $sum: "$completedCount" }
    }
  }
])

两种写法执行后都会输出你预期的结果:

{
    "_id": ObjectId("612370c1abbe777ae8d8c0eb"),
    "count": 3
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:36:05