是的,我是一名SQL骑师(sorta)进入CouchDb Map/Reduce世界.我以为我已经弄清楚CouchDB数据集的COUNT(*)SQL聚合器函数的等价如何与以下内容:
地图:
function(doc) {
emit(doc.name, doc);
}
Run Code Online (Sandbox Code Playgroud)
降低:
function(keys, values, rereduce){
return values.length;
}
Run Code Online (Sandbox Code Playgroud)
我觉得有用,返回的内容如下:
"super fun C" 2
"super fun D" 2
"super fun E" 2
"super fun F" 18
Run Code Online (Sandbox Code Playgroud)
......但不是真的.当我添加记录时,此计数变化很大.有时计数会减少,这是非常令人惊讶的.难道我做错了什么?也许我不完全理解最终一致性的概念?
Wil*_*ris 27
看起来您的减少结果正在重新减少.也就是说,reduce
每个键被调用不止一次,然后再用这些结果调用.您可以使用以下reduce
函数处理:
function(keys, values, rereduce) {
if (rereduce) {
return sum(values);
} else {
return values.length;
}
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以更改map
函数,以使值始终为文档计数:
// map
function(doc) {
emit(doc.name, 1);
}
// reduce
function(keys, values, rereduce) {
return sum(values);
}
Run Code Online (Sandbox Code Playgroud)