MapReduce er en operation, der går over en masse dokumenter og udfører en handling. Jeg er ikke helt sikker på, at det er præcis det, du vil have, men muligvis poster du en enklere form for dit egentlige problem. Under alle omstændigheder fungerer følgende kode ved at udsende 3 gange for dit enkelt dokument, ved at bruge dokumentets _id som nøglen til reduktionsfunktionen.
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();