如何在mongodb中为整个集合应用聚合管道运算符

问题描述 投票:0回答:1

我有一个场景,我需要为集合中的所有属性应用聚合管道运算符。在这里我是如何实现它的。

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'}}

node.js mongodb express mongoose aggregation-framework
1个回答
1
投票

您必须指定_idnull以累积所有文档的值,然后使用$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
    }
]);
© www.soinside.com 2019 - 2024. All rights reserved.