MapReduce är en operation som går över ett gäng dokument och utför en operation. Jag är inte helt säker på att det är exakt vad du vill, men möjligen lägger du upp en enklare form av ditt verkliga problem. I vilket fall som helst fungerar följande kod genom att sända ut 3 gånger för ditt enskilda dokument, med dokumentets _id som nyckeln till reduceringsfunktionen.
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();