我有一个关于Map / Reduce的问题在mongodb中对内部文档进行排序。 该计划如下:
{
"_id" : 16,
"days" : {
"1" : 123,
"2" : 129,
"3" : 140,
"4" : 56,
"5" : 57,
"6" : 69,
"7" : 80
}
所以现在我的问题是: 如何从上述数据中总结一些特定的日子。 举个例子:
我想总结第1,3和7天的值,得到结果。 我尝试了解决方案 MapReduce aggregation based on attributes contained outside of document但是没有取得任何成功。
有人能帮助我吗?
答案 0 :(得分:3)
MapReduce是一个循环遍历一堆文档并执行操作的操作。我不完全确定它正是你想要的,但可能你发布了一个更简单的真实问题。在任何情况下,以下代码通过为单个文档发出3次,使用文档的_id作为reduce函数的键。
doc = {_id : 16, days : { 1 : 123, 2 : 129, 3 : 140, 4 : 56, 5 : 57, 6 : 69, 7 : 80 }};
db.so.insert(doc);
map = function() {
emit(this._id, this.days["1"]);
emit(this._id, this.days["3"]);
emit(this._id, this.days["7"]);
}
reduce = function (k, vals) {
var sum = 0;
vals.forEach(function (v) {sum += v;});
return sum;
}
res = db.so.mapReduce(map, reduce, {out : {inline : 1}});
res.find();