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/
我有 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/