【问题标题】:How Do I get saperated counts while grouping on multiple fields mongodb aggregation?如何在对多个字段 mongodb 聚合进行分组时获得单独的计数?
【发布时间】:2020-07-15 16:17:41
【问题描述】:

我的候选集合中有以下文档。

candidates = [
  {
    name: "amit",
    age: 21,
    city: 'pune'
  }
   {
    name: "rahul",
    age: 23,
    city: 'pune'
  },
   {
    name: "arjun",
    age: 21,
    city: 'pune'
  },
   {
    name: "rakesh",
    age: 23,
    city: 'pune'
  },
  {
    name: "amit",
    age: 22,
    city: 'nashik'
  }
]

我想按年龄和城市字段分组,并根据彼此独立的总和计算文档 我尝试了以下查询

candidate.aggregate([
  {$group: {_id: {age: '$age', city: '$city'}, count: {$sum: -1}}}
  {$sort: {count: -1}},
  {$limit: 10}
])

这让我计算了年龄和城市的组合结果。 我想要什么

{
  ages: [
    {
      age: 21,
      count: 2
    },
    {
      age: 23,
      count: 2
    },
    {
      age: 21,
      count: 1
    }
  ],
  cities: [
    {
      city: 'pune',
      count: 4
    },
    {
      city: 'nashik',
      count: 1
    }
  ]
}

感谢您的帮助。

【问题讨论】:

    标签: mongodb aggregation-framework aggregation


    【解决方案1】:

    您需要使用 $facet 舞台,每个年龄一个 $group 舞台,每个城市另一个。 这是查询:

    db.collection.aggregate([
      {
        $facet: {
          byCity: [
            {
              $group: {
                _id: {
                  city: "$city"
                },
                count: {
                  $sum: 1
                }
              }
            },
            {
              $sort: {
                count: -1
              }
            },
            {
              $limit: 10
            }
          ],
          byAge: [
            {
              $group: {
                _id: {
                  age: "$age",
    
                },
                count: {
                  $sum: 1
                }
              }
            },
            {
              $sort: {
                count: -1
              }
            },
            {
              $limit: 10
            }
          ]
        }
      },
    ])
    

    Mongo playground

    【讨论】:

      猜你喜欢
      • 2014-02-27
      • 2014-11-08
      • 1970-01-01
      • 2023-01-20
      • 2019-07-03
      • 2017-03-24
      • 1970-01-01
      • 2019-03-20
      • 2018-04-05
      相关资源
      最近更新 更多