這聽起來像海報MongoDB中的Map/Reduce操作的子例子。
你想要做的是首先運行一個地圖步驟,在那裏你發出屬於學生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;
}
而且在蒙戈語法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
。你可以在哪裏查詢它。
要了解如何使用MapReduce的貓鼬中請看看這個問題:mongoose mapreduce()
我試過這個,但得到了錯誤 - 500 TypeError:Object#
這是錯誤--500 TypeError:Object#
@dany這是因爲您使用的是MongoDB 2.0.5,但聚合框架需要2.2+。你能升級到2.2嗎? – JohnnyHK