是的,我是一名进入SQL /Reduce世界的CouchDb骑师(差不多)。我想我已经知道了CouchDB数据集的COUNT(*) SQL聚合器函数的等价物是如何实现的,如下所示:
映射:
function(doc) {
emit(doc.name, doc);
}
Reduce:
function(keys, values, rereduce){
return values.length;
}
我认为这是可行的,返回如下内容:
"super fun C" 2
"super fun D" 2
"super fun E" 2
"super fun F" 18
..。但不是真的。当我添加一条记录时,这个计数变化很大。有时计数实际上减少了,这是非常令人惊讶的。我做错了什么吗?也许我没有完全理解最终一致性的概念?
发布于 2009-10-19 01:56:12
看起来你的reduce结果正在被重新减少。也就是说,为每个键多次调用reduce
,然后使用这些结果再次调用。您可以使用如下所示的reduce
函数来处理此问题:
function(keys, values, rereduce) {
if (rereduce) {
return sum(values);
} else {
return values.length;
}
}
或者,您可以更改map
函数,使这些值始终是文档数:
// map
function(doc) {
emit(doc.name, 1);
}
// reduce
function(keys, values, rereduce) {
return sum(values);
}
发布于 2010-03-30 23:29:11
只需在您的reduce中放入:
_count
您还可以使用以下命令获取总和:
_sum
因此,基本上是reduce:"_sum“或reduce:"_count”,并确保您的映射产生的值是一个有效的整数(数值)
https://stackoverflow.com/questions/1586585
复制相似问题