在发出函数中将键的值指定为0,并在正确地减少它之后,按预期给出集合中一列的总数。现在我的问题是我不明白这是如何工作的。
我有这样的发射;
函数(){发出(0,this.total);}
有人可以向我解释一下这方面的工作吗?先感谢您。
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); }
它们将导致保存结果,即使批次名称不同。
为了用一些内部结构来补充其他答案,当您发出单个且仅键时,发出的结果文档将如下所示:
{_id:0,value:[5,6,7,8,9]}
数组表示所有发射的组合。
发射时根据键分组发射,因此这意味着只有一个文档,该文档的内容是total
集合中的所有字段。
因此,当减少出现并将所有这些数字相加时,它将正确总结total
集合中所有字段的总数。