首先,根据目标的不同,视图可能不是最佳方法。如果所有键都知道,那么使用 CRUD 操作而不是视图会更快。如果要求使用 reduce 来找到所有键的平均值或最大值,或者键是简单未知的,那么视图是正确的方法。
Couchbase 服务器内部的计数器存储为二进制而不是 JSON。结果,视图引擎将二进制转换为 base64。当文档被 decode( decodeBase64(doc)
) 时,它将是一个ASCII 码。然后需要将其转换为字符串,String.fromCharCode(decode[i])
这需要依次为每个数字完成。
例如,如果计数器文档是Mg==
,当它被解码时,它将具有 ASCII 码50
,即十进制字符串2
。
这种观点应该可以解决问题。
function (doc, meta) {
if (meta.id.indexOf("counter_") === 0) {
var decode = decodeBase64(doc);
var value = null;
for (i = 0; i < decode.length; ++i) {
if (value == null) {
value = String.fromCharCode(decode[i]);
} else {
value += String.fromCharCode(decode[i]);
}
}
emit(meta.id, parseInt(value));
}
}