mongoDB 中出现错误未知组运算符“$group”

use*_*513 3 javascript mongoose mongodb node.js mongodb-query

我正在尝试计算distinct(not unique)Emp No相同department,但出现错误

\n\n

查询失败:未知组运算符\'$group\'

\n\n

这是我的代码\n https://mongoplayground.net/p/UvYF9NB7vZx

\n\n
db.collection.aggregate([\n  {\n    $group: {\n      _id: "$Department",\n      total: {\n        "$group": {\n          _id: "$Emp No"\n        }\n      }\n    }\n  }\n])\n
Run Code Online (Sandbox Code Playgroud)\n\n

预期产出

\n\n
[\n  {\n    "_id": "HUAWEI\xe2\x80\x9d,\n\xe2\x80\x9ctotal\xe2\x80\x9d:1\n  },\n  {\n    "_id": "THBS\xe2\x80\x9d,\n\xe2\x80\x9ctotal\xe2\x80\x9d:2\n  }\n]\n
Run Code Online (Sandbox Code Playgroud)\n\n

THBS有两个不同的Emp No A10088P2CA20088P2C

\n\n

HUAWEI只有一个Emp No A1016OBW

\n

Sai*_*tty 7

所以,$group是Pipeline阶段,只能在上层使用。

但对于您所需的输出,我相信有很多方法,我们也可以这样做:

db.collection.aggregate([
  {
    $group: {
      _id: {
        dept: "$Department",
        emp: "$Emp No"
      },
      total: {
        "$sum": 1
      }
    }
  },
  {
    $group: {
      _id: "$_id.dept",
      total: {
        "$sum": 1
      }
    }
  }
])
Run Code Online (Sandbox Code Playgroud)

Department在这里,在第一阶段,我们将及其分组Emp No,并且我们还计算Emp No每个部门中有多少人。[此计数您可以删除,因为我们没有使用它。]

此阶段的结果将是:

[
  {
    "_id": {
      "dept": "THBS",
      "emp": "A10088P2C"
    },
    "total": 2
  },
  {
    "_id": {
      "dept": "THBS",
      "emp": "A20088P2C"
    },
    "total": 1
  },
  {
    "_id": {
      "dept": "HUAWEI",
      "emp": "A1016OBW"
    },
    "total": 3
  }
]
Run Code Online (Sandbox Code Playgroud)

接下来,在这部分数据之上,我再次与部门分组。进入$_id.dept,并以相同的方式进行计数,这会以您所需的格式给出结果。

[
  {
    "_id": "HUAWEI",
    "total": 1
  },
  {
    "_id": "THBS",
    "total": 2
  }
]
Run Code Online (Sandbox Code Playgroud)

演示