MapReduce is een bewerking die een reeks documenten doorloopt en een bewerking uitvoert. Ik weet niet helemaal zeker of het precies is wat je wilt, maar mogelijk post je een eenvoudigere vorm van je echte probleem. In ieder geval werkt de volgende code door 3 keer uit te zenden voor uw enkel document, waarbij u de _id van het document gebruikt als de sleutel tot de reduceerfunctie.
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();