elasticsearch MongoDB在一个聚合中多个组

hi3rlvi2  于 12个月前  发布在  ElasticSearch
关注(0)|答案(1)|浏览(113)

我有以下数据

[
    {
        _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中执行弹性聚合操作

u7up0aaq

u7up0aaq1#

对我来说,这似乎是$facet的一个确切用例。

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

Mongo Playground

相关问题