我们使用Couchbase的增量函数将一些计数器存储在具有常量前缀SomePrefix_
的变量键上。
我们定义了一个视图,它可以获取所有以SomePrefix_
开头的文件:
function (doc, meta) {
if (meta.id.indexOf("SomePrefix_") === 0) {
emit(meta.id, doc);
}
}
当我们查询视图时,我们会得到"Mg=="
,"MQ=="
等值。
.NET SDK无法加载视图结果并将其映射到整数。
有任何解决方法吗?
答案 0 :(得分:2)
首先,根据目标是什么,视图可能不是最好的方法。如果所有键都已知,那么使用CRUD操作而不是视图会更快。如果要求使用reduce来查找所有键的平均值或最大值,或者键很简单,那么视图就是正确的方法。
Couchbase服务器计数器的内部存储为二进制而不是JSON。因此,视图引擎将二进制文件转换为base64。当doc解码时(decodeBase64(doc)
),它将是ASCII code。然后需要使用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));
}
}