我正在尝试使用Map-Reduce而不是聚合框架,但是我真的很挣扎,我找不到关于如何处理它的任何好的教程。假设我有一个汇总,返回的是女性和男性的平均体重和身高。
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