Couchdb重新导出理解和总结

Couchdb重新导出理解和总结,couchdb,couchbase,Couchdb,Couchbase,我不知道这是否真的是一个教训,但这就是我来这里的原因 我有这个: “非洲裔”ID:f6733302df85ac109397f4b6030005bf[1,2] “非洲裔”ID:f6733302df85ac109397f4b6030006d1[1,3] “非洲裔”ID:f6733302df85ac109397f4b6030012b6[2,4] “中文”ID:f6733302df85ac109397f4b6030012eb 1 “中文”ID:f6733302df85ac109397f4b603001d

我不知道这是否真的是一个教训,但这就是我来这里的原因

我有这个:

“非洲裔”ID:f6733302df85ac109397f4b6030005bf[1,2]

“非洲裔”ID:f6733302df85ac109397f4b6030006d1[1,3]

“非洲裔”ID:f6733302df85ac109397f4b6030012b6[2,4]

“中文”ID:f6733302df85ac109397f4b6030012eb 1

“中文”ID:f6733302df85ac109397f4b603001d87 1

如果值不是数组,我知道如何计算和(如 中文)。但我无法将数组中的值和 结果如下:“南非语”“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);
}
得到“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];
      }
    }
  }
}
函数(键、值、返回值)
{
var合计=0;
varⅠ,j;
对于(i=0;i