【发布时间】:2014-06-25 16:17:38
【问题描述】:
我正在尝试找出一种方法来计算存储桶中非主键的唯一值的数量。 Couchbase 2.5 提供了一个 n1ql 方法来做到这一点。如果我们使用他们的啤酒样本,您可以发出以下命令:
从啤酒样本中选择计数(独特风格)
返回标量值 68。
我使用的是 couchbase 2.2.0,它在技术上没有 n1ql。如果可能的话,我想利用 map/reduce/rereduce 功能。原因是我有 100 条数百万条记录,并且临时查询可能需要几天时间才能运行。有这样的方法吗?
对于地图功能,我有以下内容:
function (doc, meta) {
if ( doc.type == "beer")
emit(doc.style, doc.style);
}
对于reduce,我有以下内容:
function(key, values, rereduce) {
var u = {}, a = [];
var results = {};
if (rereduce) {
for (var i = 0; i < values.length; i ++ ) {
for ( var j = 0; j < values[i].length; j ++ ) {
if (u.hasOwnProperty(values[i][j])) {
continue;
}
a.push(values[i][j]);
u[values[i][j]] = 1;
}
}
return (a);
} else {
for(var i = 0; i < values.length; i++) {
if (u.hasOwnProperty(values[i])) {
continue;
}
a.push(values[i]);
u[values[i]] = 1;
}
return(a);
}
}
这将返回一个具有唯一值但不是标量计数的数组。有什么办法可以得到独特啤酒风格的标量计数?谢谢。
【问题讨论】:
标签: map unique couchbase reduce scalar