0

在发出函数中将键的值指定为0,并在正确地减少它之后,按预期给出集合中一列的总数。现在我的问题是我不明白这是如何工作的。

我有这样的发射;

函数(){发出(0,this.total);}

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

4

2 回答 2

2

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

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

它们将导致保存结果,即使批次名称不同。

于 2013-06-26T09:25:55.127 回答
1

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

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

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

发射时根据键分组发射,因此这意味着只有一个文档,该文档的内容是total集合中的所有字段。

因此,当减少出现并将所有这些数字相加时,它将正确总结total集合中所有字段的总数。

于 2013-06-26T09:56:43.807 回答