我想减少我拥有的数据量,并在返回之前对其进行预处理,以便只填充计算出的数据。作为一个简单的例子,我有以下一系列的数据,表示在给定时间内的一个值hours:minutes
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}
];
所以在最低的分组中,我想得到值的细节,意思是:
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中实现这一点。因为没有更深层次的数据级联,所以没有什么可分组的,因此“减少”。
下一步是按小时分组,也就是说,把以前的结果汇总起来
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中真的有可能完成这类任务吗,还是我应该简单地返回绝对值并在客户端执行计算以显示图表?
2条答案
按热度按时间t98cgbkg1#
我不确定使用reduce是不可能的,但至少看起来很难。
事实上,你可以不用减少使用
_list
而不是功能。与reduce不同,list fn以精确的顺序接收整个视图结果,因此您总是知道数据块从何处开始以及它的长度。另一个好处是,您可以在一个api请求中执行所有折叠周期,并将所有折叠作为单个对象发送—与map/reduce不同,
_list
fns可以发送任何结构(和任何mime)的结果。看到了吗http://docs.couchdb.org/en/latest/api/ddoc/render.html#db-有关详细信息,请参阅设计文档列表名称视图名称。
kq4fsx7k2#
我很确定你不能在map/reduce范例中得到delta值。原因是,在reduce阶段,任何两个键/值对都可能不匹配,而在reduce阶段之外,您只能处理单个文档。
另一方面,从几分钟到几小时的级联应该可以很好地工作,但这对您来说可能还不够。