这听起来像是 MongoDB 中 Map/Reduce 操作的典型示例。
您要做的是首先运行一个 map 步骤,在其中发出属于学生 id 111 的所有成绩。然后运行 reduce 步骤,对这些进行平均。
monogdb 代码应类似于以下内容:
var map = function() {
emit(this.Student_id, this.Mark);
}
var reduce = function(key, values) {
var result = { studentid: key, mark_sum: 0, count: 0, avg_mark: 0 };
values.forEach(function(v) {
r.mark_sum += v;
r.count += 1;
});
return r;
}
var finalize = function(key, value) {
if (value.count > 0) {
value.avg_mark = value.mark_sum / value.count;
}
return value;
}
以及在 Mongo 语法中执行 mapReduce:
var command = db.runCommand( { mapreduce:"<your collection>",
map: map,
reduce: reduce,
query: { Student_id: 111 },
out: { reduce: "session_stat" },
finalize: finalize
});
map_reduce 的结果被写入session_stat
. 在哪里可以查询。
要了解如何在 Mongoose 中使用 MapReduce,请查看以下问题:mongoose mapreduce()