Couchdb rereduce 的理解与总结

发布于 2024-12-02 08:59:49 字数 975 浏览 1 评论 0原文

我不知道这是否真的减少了,但这就是我来这里的原因。

我有这个:

“非洲人”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);
}

I don't know if this is really rereduce but that's why I'm here.

I have this:

"afrikan" ID: f6733302df85ac109397f4b6030005bf [1, 2]

"afrikan" ID: f6733302df85ac109397f4b6030006d1 [1, 3]

"afrikan" ID: f6733302df85ac109397f4b6030012b6 [2, 4]

"chinese" ID: f6733302df85ac109397f4b6030012eb 1

"chinese" ID: f6733302df85ac109397f4b603001d87 1

I know how to calculate the sum if the value wasn't an array (like in
chinese). But I can't manage to sum the values in the array and it
results in this: "afrikan" "02,41,31,2"

And one more question: is there a way to sum all the values regardless
of keys?

View code:

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

Reduce code:

function(keys,values,rereduce) 
{

return sum(values);

}

Thank you a lot :)

UPDATE:

I found an answer for Couchdb.

Here is the code:

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);
}
}
}

Reduce:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

贪恋 2024-12-09 08:59:49

你得到“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];
      }
    }
  }
}

The reason you get "02,41,31,2" is because Javascript will convert a number + an array into a string. It is very strange, but true.

> 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'

I think you do not need to worry about rereduce. Just add every value together. If it is an array, add all the values in the array.

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];
      }
    }
  }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文