首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >couchdb,禁用rereduce

couchdb,禁用rereduce
EN

Stack Overflow用户
提问于 2012-03-19 01:23:06
回答 1查看 632关注 0票数 0

我正在尝试从couch db中获取键值对。关键是玩家id,值是轮到他们的地方有多少游戏存在。我有一个map方法,它成功地获得了playerID,gameID的列表,其中playerID是轮到gameID的人。我的reduce函数是一个简单的长度调用。

代码语言:javascript
复制
function(keys, values){
  return values.length;
}

当我从Futon运行它时,它运行得很好。我得到了示例输出: 5,11 6,3

然而,当我从Divan (couchdb的couchdb)调用它时,我得到的结果是null,14

我的猜测是它通过rereduce将这些合并到一个项目中。有没有办法禁用rereduce?

谢谢。

-Nick

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-19 06:28:04

不,您不能禁用rereduce。然而,这里的不同之处在于,Futon在调用视图时添加了group=true,而Divan没有添加,这就解释了不同的结果。

您应该将reduce函数替换为"_count“,它可以正确处理reduce和re-reduce两种情况。您的函数返回值数组的长度,这只适用于reduce情况。在javascript中正确的解决方案应该是这样的;

代码语言:javascript
复制
function(keys, values, rereduce) {
  if (rereduce) {
    return sum(values);
  } else {
    return values.length
  }
}

在reduce调用中,values数组包含您发出的值,每个emit对应一个条目。因为你在计算,所以你不关心这个值是多少,只关心有多少个。在re-reduce调用中,values数组包含先前由reduce调用发出的值。在这里,值数组的长度是完全不相关的,相反,您需要的是前几个reduce阶段的长度之和。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9760455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档