我不知道这是否真的是rereduce,但这就是我在这里的原因.
我有这个:
“afrikan”ID:f6733302df85ac109397f4b6030005bf [1,2]
“afrikan”ID:f6733302df85ac109397f4b6030006d1 [1,3]
“afrikan”ID:f6733302df85ac109397f4b6030012b6 [2,4]
“chinese”ID:f6733302df85ac109397f4b6030012eb 1
“chinese”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);
}
最佳答案 你得到“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];
}
}
}
}