我有一个{key:[year,month,day,string],value:int}
{
rows:[
{
key: [
2016,
4,
30,
"String1"
],
value: 20
},
{
key: [
2016,
4,
30,
"String2"
],
value: 7
},
{
key: [
2016,
4,
30,
"String3"
],
value: 13
},{
key: [
2016,
5,
1,
"String1"
],
value: 10
},
{
key: [
2016,
5,
1,
"String4"
],
value: 12
},{
key: [
2016,
5,
2,
"String1"
],
value: 3
},
]}
从此我使用startkey
和endkey
按日期获取一系列值。我的问题是然后将密钥字符串返回的文档分组,并将值int求和。密钥的其余部分可能存在也可能不存在,这无关紧要。到目前为止,对于组级别,我只能对每个日期键进行求和。
我想要的是:
答案 0 :(得分:0)
所以我最终使用javascript在我的控制器中减少:
$scope.reduceMap = function (rows) {
var reducedMap = {};
var sortableArray = [];
for (var i = 0; i < rows.length; i++) {
var key = rows[i].key[3];
if (!reducedMap.hasOwnProperty(key)) {
reducedMap[key] = {key: key, value: rows[i].value};
} else {
reducedMap[key] = {key: key, value: rows[i].value + reducedMap[key].value};
}
}
for (var k in reducedMap) {
sortableArray.push(reducedMap[k]);
}
return sortableArray;
};
由于我要求CouchDB回答,我会留在这里但不接受它。
答案 1 :(得分:0)
如果您将视图的键发布为:string, year, month, day
并使用内置的reduce函数_sum
,则以下URL示例将为您提供所需的结果:
http://localhost:5984/text/_design/search/_view/by_text?startkey=["",2016,1,1]&endkey=[{},2016,1,1]&group_level=1
您的日期搜索条件指定为正常,但密钥的第一部分基本上是任何字符串。然后对级别1进行分组并使用总和减少为您提供字符串出现次数,其中日期范围按字符串分组。