Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Mongodb$group+;数组项计数_Arrays_Mongodb_Group By - Fatal编程技术网

Arrays Mongodb$group+;数组项计数

Arrays Mongodb$group+;数组项计数,arrays,mongodb,group-by,Arrays,Mongodb,Group By,我需要根据字段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} 我有一个$REWIND解决方案,如: [ { $unwind: "$B"

我需要根据字段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}
我有一个$REWIND解决方案,如:

[
    {
        $unwind: "$B"
    },
    {
        $group: {
            "_id": "$A",
            "countB": {$sum: 1}
    },
    {
        $project: {
            "_id": 0,
            "A": "$_id.A",
            "countB": "$countB"
        }
    }    
]
我的问题是,如果没有$REWIND阶段,是否有可能做到

谢谢。

您可以使用运算符获取各个阵列的长度

{
  $group: {
    _id: "$A",
    countB: {
      $sum: {
        $size: "$B"
      }
    }
  }
}
您可以使用运算符获取单个数组的长度

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

你试过聚合吗

db.collection.aggregate([{$project: {
"A": "$A",
  count: {
    $size: "$B"
  }
}}])

你试过聚合吗

db.collection.aggregate([{$project: {
"A": "$A",
  count: {
    $size: "$B"
  }
}}])

此查询产生一个错误:抱歉,只需将$group更改为$projectWhere is$group?@Čamo I已对其进行了编辑,因此您可以直接使用它而无需任何错误。此查询产生一个错误:抱歉,只需将$group更改为$projectWhere is$group?@Čamo I已对其进行了编辑,因此您可以直接使用它而无需任何错误。谢谢,就是这个。谢谢您。