我想从具有2个字段的集合中进行汇总:
var StatusSchema = mongoose.Schema({
Demonstrator: SchemaTypes.Long,
DemoBetriebsbereit: Boolean
}
我的聚合函数应该通过Demonstrator以及DemoBetriebsbereit字段进行聚合,然后计算每种组合的出现次数。 聚合函数如下所示:
exports.getStatusDemonstrators = function(req,res) {
Status.aggregate([
{
$match: {
"DemoBetriebsbereit": {$exists:1}
}
},
{
$group: {
_id: {Demonstrator: "$Demonstrator", betriebsbereit:
"$DemoBetriebsbereit"}, Anzahl: {$sum:1}
}
}
]).exec(function(error, status) {
if (error) {
res.send(error);
}
else {
res.json(status);
}
});
}
输出是这样的:
[{"_id":{"Demonstrator":9,"betriebsbereit":false},"Anzahl":1},{"_id":{"Demonstrator":2,"betriebsbereit":false},"Anzahl":1},{"_id":{"Demonstrator":3,"betriebsbereit":false},"Anzahl":1},{"_id":{"Demonstrator":10,"betriebsbereit":false},"Anzahl":1},{"_id":{"Demonstrator":2,"betriebsbereit":true},"Anzahl":9},{"_id":{"Demonstrator":8,"betriebsbereit":false},"Anzahl":1},{"_id":{"Demonstrator":9,"betriebsbereit":true},"Anzahl":8},{"_id":{"Demonstrator":1,"betriebsbereit":true},"Anzahl":5},{"_id":{"Demonstrator":6,"betriebsbereit":true},"Anzahl":7},{"_id":{"Demonstrator":10,"betriebsbereit":true},"Anzahl":8},{"_id":{"Demonstrator":7,"betriebsbereit":false},"Anzahl":1},{"_id":{"Demonstrator":3,"betriebsbereit":true},"Anzahl":10}]
但是,我希望输出如下:
{Demonstrator:10, series: [{betriebsbereit: true, Anzahl: 8}, {betriebsbereit: false, Anzahl:1}]},{Demonstrator:9, series: [...]},...
采用某种格式,以便我可以将其直接放在ngx图中。
答案 0 :(得分:2)
您需要添加另一个$group
步骤,然后再添加$project
。
这是聚合管道:
[
{$match: {"DemoBetriebsbereit": {$exists: 1}}},
{ $group: {
_id: {Demonstrator: "$Demonstrator", betriebsbereit: "$DemoBetriebsbereit"},
Anzahl: {$sum: 1}
}},
{ $group: {
_id: "$_id.Demonstrator",
series: {$push: {betriebsbereit: "$_id.betriebsbereit", Anzahl: "$Anzahl"}}
}},
{$project: {_id: 0, Demonstrator: "$_id", series: "$series"}}
]