Couch db date和overFlow

时间:2013-02-15 20:47:32

标签: javascript mapreduce couchdb

我需要使用CouchDB计算一个简单的任务。但是我遇到了一些问题: 我无法在Sate字符串表示中正确转换时间戳。 这是我的功能:

function(doc) {
    if (doc.temp > -50 && doc.temp < 50 ) {
        var date = new Date(doc.time); 
        emit(date, doc.temp);
    }
}

我需要在同一时间对不同的事件进行分组。但是这个类产生了一个null日期对象,我不明白为什么。

此外,我的计算平均值的reduce函数也不起作用,因为它会溢出。

function(keys, values) {
  return sum(values)/values.length;
}

如果我改为这种形式,我可以设法使第一个功能起作用:

function(doc) {
    if (doc.temp > -50 && doc.temp < 50 ) {
        emit(Math.round(doc.time/360000), doc.temp);
    }
}

2 个答案:

答案 0 :(得分:1)

你的reduce函数不起作用的原因是它不处理重新减少的情况。

在reduce函数中,您可以在reduce函数中处理map函数结果的部分。在这种情况下,rereduce参数为false。

您的reduce函数还需要处理先前reduce调用结果的部分。在这种情况下,rereduce参数为真。

请参阅文档:http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views#Reduce_vs_rereduce

答案 1 :(得分:0)

CouchDB提供非常高效的内置缩减功能。当您需要计算平均值时,通常最好使用_stats作为reduce函数,然后计算sum/count客户端。