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

时间:2017-12-28 23:52:04

标签: node.js mongodb express mongoose aggregation-framework

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

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

1 个答案:

答案 0 :(得分:1)

您必须指定nullModel.aggregate([ { $group : { _id: null, age: { $avg: { $sum: '$age' } }, risk: { $avg: { $sum: '$risk' } }, retireage: { $avg: { $sum: '$retireage' } }, wealth: { $avg: { $sum: '$wealth' } } } } ]); 来累积所有文档的值,然后使用pivot运算符来获取每个字段的总和:

var fields = ['age', 'risk', 'retireage', 'wealth', ...];
    groups = { _id: null };

fields.foreach( function (field) {  
    groups[field] = { $avg: { $sum: '$' + field } };
});

Model.aggregate([
    { 
        $group : groups
    }
]);

编辑如果您要分组多个字段,可以使用循环创建查询:

ftp
open ftp.drivehq.com 
username
password
cd  \wwwhome\Logs\
put "C:\Users\Cody\Desktop\ISO's\mini.iso"
bye
exit