【问题标题】:Couchdb rereduce understanding and sumCouchdb rereduce 理解和求和
【发布时间】:2011-08-31 06:43:39
【问题描述】:

我不知道这是否真的是 rereduce,但这就是我在这里的原因。

我有这个:

“南非荷兰语”ID:f6733302df85ac109397f4b6030005bf [1, 2]

“南非荷兰语”ID:f6733302df85ac109397f4b6030006d1 [1, 3]

“南非荷兰语”ID:f6733302df85ac109397f4b6030012b6 [2, 4]

“中文”ID:f6733302df85ac109397f4b6030012eb 1

“中文”ID:f6733302df85ac109397f4b603001d87 1

如果值不是数组,我知道如何计算总和(例如 中国人)。但我无法对数组中的值求和,它 结果是:“afrikan”“02,41,31,2”

还有一个问题:有没有办法对所有值求和? 钥匙?

查看代码:

function(doc) {
  if(doc.food) {
  emit(doc.food, doc.type);
  }
}

减少代码:

function(keys,values,rereduce) 
{

return sum(values);

}

非常感谢:)

更新:

我找到了 Couchdb 的答案。

代码如下:

function(doc) {
if(doc.food) {
if(doc.type.length>1) {
 doc.type.forEach(function(tag) {
emit(doc.food,tag);
});
}else {
emit(doc.food,doc.type);
}
}
}

减少:

function(keys,values) {
return sum(values);
}

【问题讨论】:

    标签: couchdb couchbase


    【解决方案1】:

    你得到“02,41,31,2”的原因是因为Javascript会将数字+数组转换为字符串。这很奇怪,但却是真的。

    > 0 + [2, 4] + [1, 3] + [1, 2]
    '02,41,31,2'
    
    > sum([0, [2, 4], [1, 3], [1, 2]]) // Same result
    '02,41,31,2'
    

    我认为您不必担心重新减少。只需将每个值加在一起。如果是数组,则将数组中的所有值相加。

    function(keys, values, rereduce)
    {
      var total = 0;
      var i, j;
    
      for(i = 0; i < values.length; i++) {
        if(typeof values[i] == "number") {
          total = total + values[i];
        }
    
        else {
          for(j = 0; j < values[i].length; j++) {
            total = total + values[i][j];
          }
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-27
      • 2017-03-01
      • 2011-02-22
      相关资源
      最近更新 更多