2016-05-09 16 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進行分組並減少使用總和,從而爲您提供按字符串分組日期範圍的字符串出現次數。