MapReduce ist eine Operation, die eine Reihe von Dokumenten durchläuft und eine Operation ausführt. Ich bin mir nicht ganz sicher, ob es genau das ist, was Sie wollen, aber möglicherweise posten Sie eine einfachere Form Ihres eigentlichen Problems. In jedem Fall funktioniert der folgende Code, indem er 3 Mal für Ihr einzelnes Dokument ausgibt, wobei die _id des Dokuments als Schlüssel für die Reduzierungsfunktion verwendet wird.
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();