将总计数添加到分组的+汇总数据中

时间:2020-08-13 10:51:26

标签: mongodb mongodb-query

我正在努力处理MongoDb查询。

我有一个查询,可以对一些字段进行分组和计数,例如:

field_name | count
___________________
 
field1     | 10
field2     | 20
field3     | 30

我也想在末尾添加总数,使其看起来像这样:

field_name | count
___________________
 
field1     | 10
field2     | 20
field3     | 30
total      | 60

尽管我找不到在Mongo中实现SQL的方法,但我知道如何在SQL中实现它(UNION或ROLLUP)。

这是我的查询,以防万一:

db.subscriptions.aggregate([
{$match: {isExpired: false}},
{$group: {_id: '$productId', count: {$sum: 1}}}
])

1 个答案:

答案 0 :(得分:5)

您可以使用$facet

$facet对收到的文档进行分类。我遵循的方法是,将所有文档放入一个数组(originalArr)。您可以将$exists:true用于field_name或计数或将两者都使用。这取决于你。获取另一个数组中的总数(totalArr)。然后$concat将两个数组合并为一个。

[
  {
    "$facet": {
      "originalArr": [
        {
          $match: {
            count: {
              "$exists": true
            }
          }
        },
        {
          "$project": {
            _id: 0
          }
        }
      ],
      "totalArr": [
        {
          "$group": {
            "_id": null,
            "field_name": {
              "$first": "total"
            },
            "count": {
              $sum: "$count"
            }
          }
        },
        {
          "$project": {
            _id: 0
          }
        }
      ]
    }
  },
  {
    $project: {
      combined: {
        "$concatArrays": [
          "$originalArr",
          "$totalArr"
        ]
      }
    }
  },
  {
    "$unwind": "$combined"
  },
  {
    "$replaceRoot": {
      "newRoot": "$combined"
    }
  }
]

工作Mongo playground