【发布时间】:2017-03-14 06:38:17
【问题描述】:
我有一个地图缩小视图:
.....
emit( diffYears, doc.xyz );
reduced with _sum.
xyz 是一个数字,每个整数 (diffYears) 相加。
输出大致如下:
4 1204.9
5 796.19
6 1124.8
7 1112.6
8 1993.62
9 159.26
10 395.41
11 456.05
12 457.97
13 39.80
14 483.68
15 269.469
etc..
我想做的是将结果分组如下:
Grouping Total per group
0-4 1959.2 i.e add up the xyz's for years 0,1,2,3,4
5-9 3998.5 same for 5,6,7,8,9 ...etc.
10-14 3566.3
我在这里看到了在视图输出中使用列表的建议:Using a CouchDB view, can I count groups and filter by key range at the same time? 但一直无法对其进行调整以获得任何结果。 给出的代码是:
{
_id: "_design/authors",
views: {
authors_by_date: {
map: function(doc) {
emit(doc.date, doc.author);
}
}
},
lists: {
count_occurrences: function(head, req) {
start({ headers: { "Content-Type": "application/json" }});
var result = {};
var row;
while(row = getRow()) {
var val = row.value;
if(result[val]) result[val]++;
else result[val] = 1;
}
return result;
}
}
}
我在这个部分替换了var val = row.key:
while(row = getRow()) {
var val = row.value;
if(result[val]) result[val]++;
else result[val] = 1;
}
(尽管在这种情况下,结果是一个计数。)
这似乎是这样做的方法。
(就像每个分组都有一个开始键和结束键,我可以自然地手动进行,但不能在进程内进行。或者有没有办法在一个 GET 命令中输入多个开始键和结束键????)
这一定是一件相当正常的事情,尤其是对于使用统计分析的研究人员而言。
因此我认为它确实完成了,但我找不到示例 就 CouchDB 而言。
我将不胜感激这方面的一些帮助或正确方向的指针。
非常感谢。
编辑: 也许答案在于“减少”对输出进行分组的过程?
【问题讨论】:
标签: mapreduce couchdb grouping