MongoDB MapReduce多次使用相同的密钥



答案是肯定的或否定的,带到文档的链接就足够了。

在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的全部要点。

相关内容

  • 没有找到相关文章

最新更新