我需要使用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);
}
}
答案 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
客户端。