首页 > 解决方案 > 如何在对多个字段 mongodb 聚合进行分组时获得单独的计数?

问题描述

我的候选人收藏中有以下文件。

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
    }
  ]
}

谢谢你的帮助。

标签: mongodbaggregation-frameworkaggregation

解决方案


您需要使用 $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
        }
      ]
    }
  },
])

蒙古游乐场


推荐阅读