首先:'是'或'否' - 与文档的链接就足以作为答案。
在mongo dbs mapreduce中,可以为同一个键多次调用reduce函数,还是保证每个键调用一次reduce函数?
假设我对map函数有以下输入:
{ 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 }
答案 0 :(得分:2)
是的,对于同一个密钥,可以多次调用reduce,除非只有一个结果,在这种情况下根本不调用reduce,因为没有什么可以减少:http://docs.mongodb.org/manual/tutorial/troubleshoot-reduce-function/#ensure-reduce-function-idempotence
答案 1 :(得分:1)
或者更准确地说是或否,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的重点。