Я пытаюсь использовать Map-Reduce вместо агрегации Framework, но я действительно борюсь с этим, я не могу найти хорошие учебники о том, как с этим бороться.Допустим, у меня есть агрегат, который возвращает средний вес и рост людей, различающихся по мужчинам и женщинам.
db.people.aggregate
(
{
$group:
{
_id:"$sex",
avgHeight: {$avg: {$toDouble:"$height"}},
avgWeight: {$avg: {$toDouble:"$weight"}},
}
}
)
Итак, я предполагаю, что мне нужно сделать функцию карты, которая излучает: пол, рост и вес, чтобы она выгляделакак это:
var mapFunction1 = function() {
emit(this.sex, this.height, this.weight);
};
Затем функция уменьшения, которая возвращает среднюю высоту:
var reduceFunction1 = function(keySex, valuesHeight) {
return Array.avg(valuesHeight);
};
И вторая функция уменьшения для веса:
var reduceFunction2 = function(keySex, valuesWeight) {
return Array.avg(valuesWeight);
};
И, наконец, я вызываювсе вышло:
db.people.mapReduce(
mapFunction1,
reduceFunction1,
reduceFunction2,
{ out: "map_reduce_example" }
)
и когда я пытаюсь запустить его, я получаю ошибку
2018-11-13T17:34:03.372+0100 E QUERY [js] TypeError: c.out is undefined :
DBCollection.prototype.mapReduce@src/mongo/shell/collection.js:1135:1
@przyklad.js:12:1
failed to load: przyklad.js