MapReduceは、一連のドキュメントをループして操作を実行する操作です。それがあなたが望むものであるかどうかは完全にはわかりませんが、おそらくあなたはあなたの本当の問題のより単純な形を投稿しています。いずれの場合も、次のコードは、ドキュメントの_idをreduce関数のキーとして使用して、単一のドキュメントに対して3回発行することで機能します。
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();