我正试图从沙发数据库中获取一个键值对。关键是玩家ID,价值是轮到他们的游戏数量。我有一个map方法,可以成功获取playerID,gameID的列表,其中playerID是谁为gameID转。我的reduce函数是一个简单的长度调用。
function(keys, values){
return values.length;
}
当我从Futon运行时,它运行正常。我得到了示例输出: 5,11 6,3
然而,当我从Divan(C#lib for couchdb)调用它时,我得到了结果 null,14
我的猜测是通过rereduce将它们合并为一个项目。有没有办法禁用rereduce?
感谢。
-Nick
答案 0 :(得分:2)
不,你不能禁用rereduce。但是,这里的区别在于,在调用您的视图时,Futon正在添加group = true,但Divan不是,这解释了不同的结果。
你应该用“_count”替换你的reduce函数,它正确处理reduce和re-reduce案例。您的函数返回values数组的长度,这仅适用于reduce情况。 javascript中的正确解决方案看起来像这样;
function(keys, values, rereduce) {
if (rereduce) {
return sum(values);
} else {
return values.length
}
}
在reduce调用中,values数组包含您作为值发出的任何内容,每个发出一个条目。既然你在计算,你就不在乎那个价值是什么,只关注它们中有多少。在re-reduce调用中,values数组包含reduce调用先前发出的值。这里,values数组的长度完全不相关,而是需要前一个reduce阶段的长度之和。