我有一组房地产,我在mongodb上运行map reduce来计算一些基本统计数据。在本地一切都很好,但当我在mongohq上运行任务时,我会得到递归结果。
让我稍微简化一下,而不是真正的reduce fn,说reduce是:
function(key, values) {
return { values: values };
}
地图功能:
function() {
emit('price', this.price);
}
当我在本地运行任务时,输出看起来像:
{
"values": [
1024.1712707182319,
661.0377201728149,
651.5957446808511,
1553.7073816617014,
1128.664171911323
]
}
现在有趣的是,当我在生产数据库上运行它时,输出看起来像:
{
"values": [
{
"values": [
{
"values": [
1561.5615615615618,
1026.2054507337525,
1428.5714285714287
]
},
1092.1177587844254,
1040.2010050251256,
1547.6190476190477
]
}
]
}
知道这里可能出了什么问题吗?
罪魁祸首可能是reduce
函数。
https://docs.mongodb.org/manual/reference/command/mapReduce/#dbcmd.mapReduce
reduce函数必须是幂等的。确保以下陈述正确无误:
reduce( key, [ reduce(key, valuesArray) ] ) == reduce( key, valuesArray )
reduce函数应该是可交换的:也就是说,值数组中元素的顺序不应该影响reduce功能的输出,因此以下语句为真:
reduce( key, [ A, B ] ) == reduce( key, [ B, A ] )
希望这有帮助,