Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在mongodb mapreduce中实现需要非关联约简的计算_Javascript_Mongodb_Mapreduce - Fatal编程技术网

Javascript 如何在mongodb mapreduce中实现需要非关联约简的计算

Javascript 如何在mongodb mapreduce中实现需要非关联约简的计算,javascript,mongodb,mapreduce,Javascript,Mongodb,Mapreduce,最好用一个例子来解释这个问题: 集合包含一个事件的一个文档,该事件可以是某个程序的开始事件或停止事件 例如,当程序在12:00开始运行时,它会写入一个文档 { program_name: 'A', time: 12:00, event: 'Start' } 当它在12:10结束时,它会写入另一个文档 { program_name: 'A', time: 12:10, event: 'Stop' } 因此,在集合中有许多对不同程序的开始-停止文档 如何通过map reduce计算每个程

最好用一个例子来解释这个问题:

集合包含一个事件的一个文档,该事件可以是某个程序的开始事件或停止事件

例如,当程序在12:00开始运行时,它会写入一个文档

{ program_name: 'A', time: 12:00, event: 'Start' }
当它在12:10结束时,它会写入另一个文档

{ program_name: 'A', time: 12:10, event: 'Stop' }    
因此,在集合中有许多对不同程序的开始-停止文档

如何通过map reduce计算每个程序的运行时间

例如,map和reducer函数是:

function map() {
    emit( this.program_name, { time: this.time, event: this.event} )
}

function reduce(key, values) {
    var timeElapsed = 0
    if ( values[0].event == 'Start' ) {
        timeElapsed = values[1].time - values[0].time
    }
    else {
        timeElapsed = values[0].time - values[1].time
    }

    return timeElapse;
}
上面的实现给出了我想要做什么的想法,但是它违反了许多人所说的结合的、幂等的和交换的


如何实现mapreduce以使其符合mongodb reducer规则,或者在mapreduce方法中不可能做到这一点?

reduce函数可以如下所示:

function reduce(key, values) {
    return values.reduce((res, e) => Object.assign({[e.event]:e.time}, res, e), {})
}
应在函数中完成数学运算:

function(key, reducedValue) {
    return reducedValue.Stop - reducedValue.Start;
}