是的,我是一个SQL操作员(排序)进入CouchDb Map/Reduce的世界。我想我已经弄清楚了CouchDB数据集的COUNT(*)SQL聚合器函数的等价物是如何使用以下内容的:
Map:
function(doc) {
emit(doc.name, doc);
}
减少:
function(keys, values, rereduce){
return values.length;
}
我认为这是可行的,返回如下内容:
"super fun C" 2
"super fun D" 2
"super fun E" 2
"super fun F" 18
......但实际上不是。当我添加一条记录时,这个计数变化很大。有时计数实际上 * 减少 *,这非常令人惊讶。我做错了什么吗?也许我没有完全理解最终一致性的概念?
2条答案
按热度按时间xfyts7mz1#
在你的减少只是把:
计数(_C)
您也可以使用以下方法获得总和:
总和(_S)
因此基本上减少了:“_sum”或减少:“_count”并确保贴图发出的值是有效的整数(数值)
请参见“内置reduce函数”。
oalqel3c2#
看起来你的reduce结果正在被重新约简。也就是说,
reduce
被多次调用,然后再次调用这些结果。你可以用reduce
函数来处理这个问题,如下所示:或者,您可以变更
map
函数,让值永远是文件计数: