首页 > 解决方案 > Mongodb $group + 数组项数

问题描述

我需要根据字段 A 对 Mongodb 数据进行 $group ,结果应该包含字段 B 项目的计数,即数组。例如,如果数据看起来像:

{A: 1, B: [1, 2, 3]}
{A: 1, B: [4, 2]}
{A: 2, B: [1]}
{A: 2, B: [2, 3]}
{A: 2, B: [1, 2, 3]}

结果应如下所示:

{A: 1, countB: 5}
{A: 2, countB: 6}

我有一个 $unwind 的解决方案,例如:

[
    {
        $unwind: "$B"
    },
    {
        $group: {
            "_id": "$A",
            "countB": {$sum: 1}
    },
    {
        $project: {
            "_id": 0,
            "A": "$_id.A",
            "countB": "$countB"
        }
    }    
]

我的问题是是否可以在没有 $unwind阶段的情况下做到这一点?

谢谢你。

标签: arraysmongodbgroup-by

解决方案


您可以使用$size运算符来获取各个数组的长度。

{
  $group: {
    _id: "$A",
    countB: {
      $sum: {
        $size: "$B"
      }
    }
  }
}

推荐阅读