答案是肯定的或否定的,带到文档的链接就足够了。
在mongo dbs mapreduce中,reduce函数可以为同一个键调用多次吗?还是我可以保证每个键调用一次reduce功能?
假设我对地图功能有以下输入:
{ id: 1, day: 1, category: 1, value: 5 },
{ id: 2, day: 1, category: 2, value: 5 },
{ id: 3, day: 2, category: 2, value: 7 },
{ id: 4, day: 2, category: 2, value: 7 }
以下密钥:
{ 'day': this.day, 'category': this.category }
并为每个键发出以下值:
{ 'value': this.value }
是的,reduce可以为同一个键调用多次,除非只有一个结果,在这种情况下,由于没有任何内容要reduce,所以根本不调用reduce:http://docs.mongodb.org/manual/tutorial/troubleshoot-reduce-function/#ensure-减少函数幂等性
或者更确切地说,是或否,mapReduce的一个工作示例:
db.collection.mapReduce(
function() {
emit(
{ "day": this.day, "category": this.category },
this.value
);
},
function(key, value) {
var reduced = 0;
values.forEach(function(value) {
reduced += value;
});
return reduced;
},
{
"out": { "inline": 1 }
}
)
当然,在您提供的数据中,"key"在每种情况下都会有所不同,实际上并没有调用"reduce"函数。这里发生的情况是,来自"映射器"的值被简单地发送到输出,而不被触摸。
只有当同一个键实际上有"多个"值时,才会实际调用"reduce"函数。这就是mapReduce的全部要点。