Мисля, че за това ще ви е необходимо намаляване на картата, за да напишете функция, която има достъп до конкретни позиции в масива. Можете да опитате нещо подобно:
Функция за картографиране:
var M = function() {
emit( this.agent, { score : this.score, qv : this.qv } )
}
Функция за намаляване:
var R = function(key, values) {
var result = { score : [0, 0, 0], qv : [0, 0, 0, 0, 0] };
values.forEach( function(value) {
for ( var i = 0; i < value.score.length; i ++ ) {
result.score[i] += parseInt(value.score[i]);
}
for ( var i = 0; i < value.qv.length; i ++ ) {
result.qv[i] += parseInt(value.qv[i]);
}
});
return result;
}
След това можете да изпълните следната функция mapReduce във вашата колекция:
db.foo.mapReduce( M, R, { out : "resultCollection" } )
И това трябва да ви даде следния желан резултат!
{
"_id" : "006",
"value" : {
"score" : [2, 1, 0],
"qv" : [ 3, 0, 3, 0, 2 ]
}
}
{
"_id" : "007",
"value" : {
"score" : [ 1, 0, 0],
"qv" : [ 1, 0, 1, 0, 0]
}
}