查找MongooseJs中特定类型的平均值

时间:2012-10-25 11:04:16

标签: javascript node.js mongodb mongoose

我有一个MongoDB集合“Marks”,如下所示

 _id   Student_id   Subject  Mark
   1    111          AAA      9
   2    111          BBB      5
   3    111          CCC      7
   4    222          AAA      10
   5    222          CCC      6
   6    222          BBB      8

我需要使用 MONGOOSEJS 找到3个科目中student_id = 111得分的平均分数。我得到了一个解决方案

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);
    }
}
);

输出

    [ { _id: 222, markAvg: 8 }, { _id: 111, markAvg: 7 } ]

当我通过student_id时,我只想要{_id:111,markAvg:7}:111作为参数。 任何人都可以建议一个答案。

1 个答案:

答案 0 :(得分:3)

您需要在管道顶部添加$match元素,以便将集合的文档过滤为您想要输入$group的文档:

Mark.aggregate([
    { $match: { Student_id: 111 } },
    { $group: {
        _id: '$Student_id',
        markAvg: { $avg: '$Mark'}
    }}
], function (err, results) {
    if (err) {
        console.error(err);
    } else {
        console.log(results);
    }
});