mongodb上的map reduce返回递归结果

时间:2015-11-02 17:49:23

标签: mongodb mapreduce mongohq

我有一组房地产,我在mongodb上运行map reduce来计算一些基本的统计数据。一切都在本地工作正常,但当我在mongohq上运行任务时,我得到了递归结果。

让我简化一下,而不是真正减少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
      ]
    }
  ]
}

知道这里有什么不对吗?

1 个答案:

答案 0 :(得分:2)

罪魁祸首可能是你的reduce功能。

https://docs.mongodb.org/manual/reference/command/mapReduce/#dbcmd.mapReduce

  

reduce函数必须是幂等的。确保以下陈述为真:

reduce( key, [ reduce(key, valuesArray) ] ) == reduce( key, valuesArray )
  

reduce函数应该是可交换的:也就是说,valuesArray中元素的顺序不应该影响reduce函数的输出,因此以下语句为真:

reduce( key, [ A, B ] ) == reduce( key, [ B, A ] )

希望这有帮助,

相关问题