我正在尝试从couch db中获取键值对。关键是玩家id,值是轮到他们的地方有多少游戏存在。我有一个map方法,它成功地获得了playerID,gameID的列表,其中playerID是轮到gameID的人。我的reduce函数是一个简单的长度调用。
function(keys, values){
return values.length;
}当我从Futon运行它时,它运行得很好。我得到了示例输出: 5,11 6,3
然而,当我从Divan (couchdb的couchdb)调用它时,我得到的结果是null,14
我的猜测是它通过rereduce将这些合并到一个项目中。有没有办法禁用rereduce?
谢谢。
-Nick
发布于 2012-03-19 06:28:04
不,您不能禁用rereduce。然而,这里的不同之处在于,Futon在调用视图时添加了group=true,而Divan没有添加,这就解释了不同的结果。
您应该将reduce函数替换为"_count“,它可以正确处理reduce和re-reduce两种情况。您的函数返回值数组的长度,这只适用于reduce情况。在javascript中正确的解决方案应该是这样的;
function(keys, values, rereduce) {
if (rereduce) {
return sum(values);
} else {
return values.length
}
}在reduce调用中,values数组包含您发出的值,每个emit对应一个条目。因为你在计算,所以你不关心这个值是多少,只关心有多少个。在re-reduce调用中,values数组包含先前由reduce调用发出的值。在这里,值数组的长度是完全不相关的,相反,您需要的是前几个reduce阶段的长度之和。
https://stackoverflow.com/questions/9760455
复制相似问题