couchdb,禁用REREREDUCE

couchdb,禁用REREREDUCE,couchdb,mapreduce,Couchdb,Mapreduce,我正在尝试从coach db中获取一个键值对。关键是玩家id,值是轮到他们的地方有多少游戏。我有一个map方法,它成功地获得了playerID和gameID的列表,其中playerID是谁的轮到gameID了。我的reduce函数是一个简单的长度调用 function(keys, values){ return values.length; } 当我在Futon运行时,它运行良好。我得到了示例输出: 5,11 6,3 然而,当我从Divan(couchdb的C#lib)调用它时,我得到了结

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

function(keys, values){
  return values.length;
}
当我在Futon运行时,它运行良好。我得到了示例输出: 5,11 6,3

然而,当我从Divan(couchdb的C#lib)调用它时,我得到了结果 空,14

我猜它是通过一个重新导出将这些内容合并成一个项目。有没有办法禁用REREREDUCE

谢谢


-尼克

不,您不能禁用重新导出。然而,这里的区别是Futon在调用视图时添加了group=true,而Divan没有,这解释了不同的结果

您应该将reduce函数替换为“\u count”,它可以正确处理reduce和re reduce情况。函数返回值数组的长度,该长度仅适用于reduce情况。javascript中的正确解决方案如下所示

function(keys, values, rereduce) {
  if (rereduce) {
    return sum(values);
  } else {
    return values.length
  }
}
在reduce调用中,values数组包含作为值发出的任何内容,每个发出一个条目。因为你在计算,你不在乎这个值是多少,只在乎它们有多少。在re-reduce调用中,values数组包含以前由reduce调用发出的值。这里,值数组的长度是完全不相关的,相反,您需要前面reduce阶段的长度之和