2015-02-09 26 views
0

我想在我将它返回到只填充计算的数据之前减少我拥有的数据量并对其进行预处理。 作为简单示例我有以下一系列的数据,在小时的给定时间表示值:分钟如何恰当地使用couchdb来正确地链接mapreduce函数或组

var testdata = [ // 
    {_id: '01', timestamp: [01, 10], value: 100}, 
    {_id: '02', timestamp: [01, 20], value: 101}, 
    {_id: '03', timestamp: [01, 30], value: 102}, 
    {_id: '04', timestamp: [02, 10], value: 103}, 
    {_id: '05', timestamp: [02, 20], value: 104}, 
    {_id: '06', timestamp: [02, 30], value: 105}, 
    {_id: '07', timestamp: [03, 10], value: 106}, 
    {_id: '08', timestamp: [03, 20], value: 107}, 
    {_id: '09', timestamp: [03, 30], value: 108}, 
    {_id: '10', timestamp: [03, 40], value: 109}, 
    {_id: '11', timestamp: [04, 10], value: 110}, 
    {_id: '12', timestamp: [04, 20], value: 111} 
]; 

所以在最低分组我想有值的detla,意思是:

key: 01 value: 100; // 100 - 0 = 100 
key: 02 value: 1; // 101-100=1 
key: 03 value: 1; // 102-101=1 
key: 04 value: 1; // 103-102=1 
key: 05 value: 1; // 104-103=1 
key: 06 value: 1; //... 
key: 07 value: 1; //... 
key: 08 value: 1; //... 
key: 09 value: 1; //... 
key: 10 value: 1; //... 
key: 11 value: 1; //... 
key: 12 value: 1; //... 

我已经不知道如何在couchdb中实现这一点。由于没有更深层次的数据,没有什么可以分组,因此“减少”。

下一步将是在h组,这意味着,从之前

key: 01 value: 102; // 100+1+1=102 
key: 02 value: 3; // 1+1+1=3 
key: 03 value: 4; // 1+1+1+1=4 
key: 04 value: 2; // 1+1=2 

最后综合这些结果一整天的结果将是

key : 01, value: 111; 

所以我的问题是,它实际上可以在couchdb中完成这种任务,或者我应该简单地返回绝对值并在客户端执行我的计算以显示图表?

回答

0

我很确定你无法在Map/Reduce范例中获得增量值。原因在于任何两个键/值对在缩小阶段可能都没有匹配,而在缩小阶段之外,您只能使用单个文档。

另一方面,从数分钟级联到数小时等应该可以正常工作,但这可能对您而言不够。

1

我不确定使用减少是不可能的,但似乎至少很难。

事实上,你可以做到这一点没有减少 - 使用_list函数代替。与reduce不同,list fns按照确切的顺序接收整个视图结果 - 所以您始终知道数据块的起始位置以及它的长度。

另一个好处是,您可以在一个API请求中执行所有折叠循环,并将所有折叠作为单个对象发送 - 与map/reduce不同,_list fns可以发送任何结构(以及任何MIME)的结果。

有关更多信息,请参阅http://docs.couchdb.org/en/latest/api/ddoc/render.html#db-design-design-doc-list-list-name-view-name

相关问题