在emit函数中将键的值赋予 0 ,并在正确减少它之后,按照预期的方式给出集合中的列总数。现在我的问题是我不明白这是如何运作的。
我的发射像这样;
function(){emit(0,this.total); }
有人可以向我解释一下这方面的工作吗?提前谢谢。
答案 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
字段的总和。