Я предполагаю, что вы хотите найти режим и медиану каждого документа, вы можете сделать это с помощью функции уменьшения карты.В этом случае вы вычисляете медиану и режим в функции карты, а уменьшение вернет результат карты нетронутым
map = function() {
var res = 0;
for (i = 0; i < this.marks.length; i++) {
res = res + this.marks[i];
}
var median = res/this.marks.length;
emit(this._id,{marks:this.marks,median:median});
}
reduce = function (k, values) {
values.forEach(function(value) {
result = value;
});
return result;
}
, а для этой коллекции
{ "_id" : ObjectId("4f02be1f1ae045175f0eb9f1"), "name" : "ram", "marks" : [ 1.22, 12.87, 1.24, 1.24, 9.87, 1.24, 87.65 ] }
{ "_id" : ObjectId("4f02be371ae045175f0eb9f2"), "name" : "sam", "marks" : [ 1.32, 11.87, 12.4, 4.24, 9.37, 3.24, 7.65 ] }
{ "_id" : ObjectId("4f02be4c1ae045175f0eb9f3"), "name" : "pam", "marks" : [ 3.32, 10.17, 11.4, 2.24, 2.37, 3.24, 30.65 ] }
вы можете получить медиану
db.test.mapReduce(map,reduce,{out: { inline : 1}})
{
"results" : [
{
"_id" : ObjectId("4f02be1f1ae045175f0eb9f1"),
"value" : {
"marks" : [
1.22,
12.87,
1.24,
1.24,
9.87,
1.24,
87.65
],
"median" : 16.475714285714286
}
},
{
"_id" : ObjectId("4f02be371ae045175f0eb9f2"),
"value" : {
"marks" : [
1.32,
11.87,
12.4,
4.24,
9.37,
3.24,
7.65
],
"median" : 7.155714285714285
}
},
{
"_id" : ObjectId("4f02be4c1ae045175f0eb9f3"),
"value" : {
"marks" : [
3.32,
10.17,
11.4,
2.24,
2.37,
3.24,
30.65
],
"median" : 9.055714285714286
}
}
],
"timeMillis" : 1,
"counts" : {
"input" : 3,
"emit" : 3,
"reduce" : 0,
"output" : 3
},
"ok" : 1,
}