dal*_*ale 2 mongoose mongodb node.js
我想获得每家公司所有事件的总和。这是我的数据:
{company: "1" event:"a"}
{company: "1" event:"b"}
{company: "1" event:"c"}
{company: "2" event:"b"}
{company: "2" event:"b"}
{company: "3" event:"c"}
{company: "3" event:"c"}
Run Code Online (Sandbox Code Playgroud)
我目前有这个来汇总事件的日期,但我正在努力按公司进一步分组:
{
"aggregate": [
{
"$group": {
"_id": "$event",
"count": {"$sum": 1}
}
},
{"$sort": {"_id": 1}}
]
}
Run Code Online (Sandbox Code Playgroud)
呈现这些结果:
[ { "_id": "a", "count": 1 }, { "_id": "b", "count": 3 }, { "_id": "c", "count": 2 }]
我如何进一步按公司对事件计数进行分组以产生以下内容:
[{
"_id": {
"company" :"1",
"events": [
{
"event": "a",
"count": 1
},
{
"event": "b",
"count": 1
},
{
"event": "c",
"count": 1
},
]
}
},
{
"_id": {
"company" :"2",
"events": [
{
"event": "b",
"count": 2
}
]
}
},
{
"_id": {
"company" :"3",
"events": [
{
"event": "c",
"count": 2
}
]
}
}
]
Run Code Online (Sandbox Code Playgroud)
我在查询中尝试了各种进一步的组,但无法生成我想要的数据。还有一个警告:我无法处理任何服务器端或更改架构,因此我只能传递我希望可以完成的查询。
db.collection.aggregate([
{
$group:{
_id:{company:"$company",event:"$event"},
count:{$sum:1}
}
},
{
$group:{
_id:"$_id.company",
events:{$push:{event:"$_id.event",count:"$count"}}
}
}
])
Run Code Online (Sandbox Code Playgroud)
如果您需要与您提到的完全相同的输出,则添加 $project 阶段,例如
$project:{_id:{company:"$_id",events:"$events"}}