1

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

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

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

此外,我的计算平均值的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);
    }
}
4

2 回答 2

1

您的 reduce 函数不起作用的原因是它不处理 re-reduce 情况。

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

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

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

于 2013-02-15T21:45:51.027 回答
0

CouchDB 提供了非常高效的内置 reduce 函数。当您需要计算平均值时,通常最好将其_stats用作 reduce 函数,然后在sum/count客户端计算。

于 2013-03-19T07:24:00.470 回答