2016-05-09 18 views
3

我有在{key:[year,month,day,string],value:int}形式文档的视图:CouchDB的组视图保持字符串键和值

{ 
    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 
    }, 
]} 

从这个我用startkeyendkey按日期来获得一定范围的值。然后,我的问题是将由键字符串返回的文档分组,然后将int值相加。其余的密钥可能存在也可能不存在,这并不重要。到目前为止,对于组级别,我只能对每个日期键的值进行求和。


当在一个表中呈现,我得到这样的: enter image description here

我要的是:

enter image description here

回答

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答案,所以我会在这里留下,但不接受它。

0

如果您发出视图的关键是:string, year, month, day和使用内置在减少功能_sum,那么下面的URL例子给你想要的结果: http://localhost:5984/text/_design/search/_view/by_text?startkey=["",2016,1,1]&endkey=[{},2016,1,1]&group_level=1

你的日期搜索条件被指定为正常,但第一关键的一部分基本上是任何字符串。然后对级别1进行分组并减少使用总和,从而为您提供按字符串分组日期范围的字符串出现次数。