我有以下数据

[
    {
        _id: ObjectId(),
        level: 'High',
        country: 'Palestine'
    },
    {
        _id: ObjectId(),
        level: 'Low',
        country: 'Jordan'
    },
    {
        _id: ObjectId(),
        level: 'High',
        country: 'Jordan'
    }
]

我可以使用以下聚合轻松地对数据进行分组

{
    $group: {
        _id: '$level',
        count: { $sum: 1 }
    }
}

它提供了以下数据

[
    {
        _id: 'High',
        count: 2
    },
    {
        _id: 'Low',
        count: 1
    }
]

但我也需要对国家和许多其他领域做到这一点 有没有一种方法可以在一个聚合中执行此操作,或者我应该只对每个聚合进行分组?

有关更多细节,我想在MongoDB中执行弹性聚合操作

推荐答案

在我看来,这完全是$facet的用例.

db.collection.aggregate([
  {
    "$facet": {
      "groupByLevel": [
        {
          $group: {
            _id: "$level",
            count: {
              $sum: 1
            }
          }
        }
      ],
      "groupByCountry": [
        {
          $group: {
            _id: "$country",
            count: {
              $sum: 1
            }
          }
        }
      ]
    }
  }
])

Mongo Playground

Mongodb相关问答推荐

如何将数组$拉到对象数组下

mongoose正在抛出Schema的错误has';t已在next.js中注册

聚合管道可以用于更新数据库中的文档吗?

MongoDB查询优化

如何向所有文档添加一个字段,其中前 100 个文档的值为 1,接下来的 100 个文档的值为 2,依此类推?

MongoDB 使用 pymongo 收集 500K 文档的写入速度很差

有没有一种方法可以找到一个文档并通过 Go 更改 mongodb 中的 id/value 来克隆它

$group 和 sum + 添加所有大于

使用 mgo 从 golang 中的 Mongodb 中 Select 列

在 Heroku 上使用 Node 读取、写入和存储 JSON

Express 无法 PUT/DELETE 方法.出了什么问题?

ExpressJS & Mongoose REST API struct :最佳实践?

mongodb无法启动

如何在 Mongoose 中更新数组值

将 MongoDB 数据库复制到本地计算机

NumberLong和简单整数之间的MongoDB区别?

mongo - Ruby连接问题

MongoDB备份计划

Mongodb同时在多个字段上聚合(计数)

无法从 mongodb 中删除集合