我有一个场景,我需要为集合中的所有属性应用聚合管道运算符。在这里我是如何实现它的。
model = {
age: Number ,
risk: Number,
retireage: Number,
wealth: Number
};
我需要总结所有并获得平均值。
我做了什么:
$group :{
_id: '',
age : {$avg : {$sum: ['$age',value]}},
risk : {$avg : {$sum: ['$risk',value]}},
retireage : {$avg : {$sum: ['$retireage',value]}},
wealth : {$avg : {$sum: ['$wealth',value]}},
}
有没有办法可以立即为集合中的所有属性应用{$avg: {$sum:'$this'}}
。
您必须指定_id
值null
以累积所有文档的值,然后使用$sum运算符来获取每个字段的总和:
Model.aggregate([
{
$group :
{
_id: null,
age: { $avg: { $sum: '$age' } },
risk: { $avg: { $sum: '$risk' } },
retireage: { $avg: { $sum: '$retireage' } },
wealth: { $avg: { $sum: '$wealth' } }
}
}
]);
编辑如果您有多个要分组的字段,可以使用循环创建查询:
var fields = ['age', 'risk', 'retireage', 'wealth', ...];
groups = { _id: null };
fields.foreach( function (field) {
groups[field] = { $avg: { $sum: '$' + field } };
});
Model.aggregate([
{
$group : groups
}
]);