取mongoosejs中列的总和/平均值

dan*_*any 2 javascript mongoose mongodb node.js

我有一个带有字段student_id,Subject,Mark的MongoDB集合"Marks".我想要特定学生得分的平均值.我的项目在NodeJs中,我使用MongooseJS进行对象建模.如何使用MOngooseJS查询?

     Student_id   Subject  Mark
     111          AAA      9
     111          BBB      5
     111          CCC      7
     222          AAA      10
     222          CCC      6
     222          BBB      8
Run Code Online (Sandbox Code Playgroud)

我希望学生得分的平均分(id)111即((9 + 5 + 7)/ 3)= 7)

Joh*_*yHK 12

如果您使用的是MongoDB 2.2,则可以使用聚合框架:

var Mark = mongoose.model('mark', new Schema({
    Student_id: Number,
    Subject: String,
    Mark: Number
}));

Mark.aggregate([
        { $group: {
            _id: '$Student_id',
            markAvg: { $avg: '$Mark'}
        }}
    ], function (err, results) {
        if (err) {
            console.error(err);
        } else {
            console.log(results);
        }
    }
);
Run Code Online (Sandbox Code Playgroud)

输出:

[ { _id: 222, markAvg: 8 }, { _id: 111, markAvg: 7 } ]
Run Code Online (Sandbox Code Playgroud)

  • 为此,将一个[`$ match`](http://docs.mongodb.org/manual/reference/aggregation/match/#_S_match)元素添加到``aggregate`管道的开头:`{$ match: {Student_id:111}}` (2认同)