在mongodb中以地图中的键为零减少

时间:2013-06-26 07:53:33

标签: mongodb mapreduce morphia

在emit函数中将键的值赋予 0 ,并在正确减少它之后,按照预期的方式给出集合中的列总数。现在我的问题是我不明白这是如何运作的。

我的发射像这样;

  

function(){emit(0,this.total); }

有人可以向我解释一下这方面的工作吗?提前谢谢。

2 个答案:

答案 0 :(得分:2)

MapReduce是一件棘手的事情。你需要改变你的心态来理解它。在您的特定情况下,您告诉mongo不关心分组选项。当您这样发出时,您的所有this.total将被发送到标识为 0 的一个批次,并在reduce步骤中全部聚合在一起。这也意味着这种情况是相同的:

function(){ emit(0, this.total); }
function(){ emit(1, this.total); }
function(){ emit('asdf', this.total); }
function(){ emit(null, this.total); }

它们将导致保存结果,甚至批次名称也不同。

答案 1 :(得分:1)

为了补充一些内部的其他答案,当您发出单个且唯一的键时,来自emit的结果文档将如下所示:

{_id:0,value:[5,6,7,8,9]}

使用数组表示所有发射的组合。

当您发出时,会在键上发出分组,这意味着只有一个文档,该文档的内容是集合中的所有total字段。

因此,当缩减出现并将所有这些数字加在一起时,它将正确地总计集合中所有total字段的总和。