C# Couchbase:使用视图查询多个原子计数器文档
我的沙发桶里有很多文件。其中一些文档用作原子操作的计数器,因此它们只存储一个数字。所有这些计数器文档在键中都有公共前缀('SomePrefix_u',例如)。如何访问所有这些“带前缀”的文档?它们不会出现在视图中。默认情况下,计数器不会从视图结果中排除。可能您是无意中在mapper中这样做的。例如,这里的mapper考虑了计数器C# Couchbase:使用视图查询多个原子计数器文档,c#,couchbase,C#,Couchbase,我的沙发桶里有很多文件。其中一些文档用作原子操作的计数器,因此它们只存储一个数字。所有这些计数器文档在键中都有公共前缀('SomePrefix_u',例如)。如何访问所有这些“带前缀”的文档?它们不会出现在视图中。默认情况下,计数器不会从视图结果中排除。可能您是无意中在mapper中这样做的。例如,这里的mapper考虑了计数器 function (doc, meta) { if (meta.type == 'base64') { emit(meta.id, {counter: de
function (doc, meta) {
if (meta.type == 'base64') {
emit(meta.id, {counter: decodeBase64(doc)});
} else {
emit(meta.id, doc);
}
}
我猜您正试图将
doc
用作JSON对象,这会导致映射程序过滤掉计数器。问题在于使用startsWith
函数。
function (doc, meta) {
if (meta.type == 'base64') {
emit(meta.id, {counter: decodeBase64(doc)});
} else {
emit(meta.id, doc);
}
}
使用
indexOf(…)===0
定义键是否以子字符串开头。在几个版本(当前使用服务器3.0.2)之后,这些计数器文档出现在查看结果中!map/reduce中没有任何变化:-)这是一种魔力。但是今天我们有另一个问题。计数器文件base64编码decodeBase64
生成字符代码数组。例如,值列中没有9
,而是[59]
。