mongodb中统计各班的人数及男女人数

问题

mongodb统计各班的人数及男女人数。

问题相关代码
  • 相关数据:
    [{  "_id": "1",  "name": "学生1",  "class": "1",  "sex": "女"},
    {  "_id": "2",  "name": "学生2",  "class": "2",  "sex": "男"},
    {  "_id": "3",  "name": "学生3",  "class": "3",  "sex": "女"},
    {  "_id": "4",  "name": "学生4",  "class": "1",  "sex": "男"},
    {  "_id": "5",  "name": "学生5",  "class": "2",  "sex": "男"},
    {  "_id": "6",  "name": "学生6",  "class": "3",  "sex": "男"},
    {  "_id": "7",  "name": "学生7",  "class": "1",  "sex": "女"},
    {  "_id": "8",  "name": "学生8",  "class": "2",  "sex": "男"},
    {  "_id": "9",  "name": "学生9",  "class": "3",  "sex": "男"},
    {  "_id": "10",  "name": "学生10",  "class": "1",  "sex": "男"},
    {  "_id": "11",  "name": "学生11",  "class": "2",  "sex": "男"},
    {  "_id": "12",  "name": "学生12",  "class": "3",  "sex": "男"}]
    
我进行的操作,可是达不到我的预期,我想要的是每个班一个文档,包括总人数、男女人数。
  • 这是代码在mongodb compass运行的截图

img

[ {
 $group: {
  _id: {
   'class': '$class',
   sex: '$sex'
  },
  count: {
   $sum: 1
  }
 }
}]
我想要达到的结果
  • 想通过mongodb的aggregate、$group得到如下结果:
    [{'class':1,'男':2,'女':2,'人数':4},
    {'class':2,'男':4,'女':0,'人数':4},
    {'class':3,'男':3,'女':1,'人数':4}]
    

这个好像没法一下求出来吧

"{""_id"": ""2"", ""sex"": 4}"
"{""_id"": ""3"", ""sex"": 4}"
"{""_id"": ""1"", ""sex"": 4}"
没写过,刚刚试了,我只能分开求
db.kb.aggregate([

    {
        $group: {
             _id: '$class', // _id: null表示全选
             sex: {'$sum': 1}
        }
    }
])