MongoDb nodejs 获取属于每个类别的项目数

MongoDb nodejs getting count of items belonging to each category

我有 2 个集合,项目和类别,我想计算每个类别中有多少项目。

每个集合的示例如下

Item = [
{
    name: "item1",
    category: ObjectId("123")
},
{
    name: "item2",
    category: ObjectId("456")
}, ...]

Category = [
{
    _id: ObjectId("123"),
    name: "category1"
}, ...]

到目前为止,我可以使用类似这样的方法计算一个类别的项目

Item.countDocuments({'category': Category[0].id}).exec(function(err, result) {
    console.log(result)
}
>> 1

我的问题是如何对所有类别执行此操作?如果有人能帮助我或指出正确的方向,我将不胜感激。

理想的输出应该是这样的:

{
    "category1": 1,
    "category2": 3
}

您需要使用两个聚合管道来实现您想要的结果。


Item.aggregate([
  {
    $group: {
      _id: "$category", count: { $sum: 1}
    }
  }
])


在结果中 _id 将是用于对字段进行分组的 ID,这将是类别 ID。

[
  {
    "_id": ObjectId(123),
    "count": 1
  },
  {
    "_id": ObjectId(456),
    "count": 1
  }
]

要了解更多关于计数聚合的信息,请访问 - https://www.mongodb.com/docs/manual/reference/operator/aggregation/count/