2013-02-15 41 views
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); 
    } 
} 
+0

查看此解决方案:http://tobyho.com/2009/10/07/taking-an-average-in-couchdb/ – 2013-02-15 21:34:22

回答

1

您减少功能不起作用,因为它不处理的原因再减少的情况下。

在您的缩小功能中,您可以在缩小功能中处理零件地图功能的结果。在这种情况下,rereduce参数为false。

您的还原功能还需要处理部分以前的还原调用的结果。在这种情况下,rereduce参数为true。

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

0

的CouchDB提供了非常有效的内置功能降低。当需要计算平均值时,通常使用_stats作为reduce函数,然后计算sum/count客户端。