我有一个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作为参数。
任何人都可以建议一个答案。
答案 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);
}
});