C# Couchbase:使用视图查询多个原子计数器文档

C# Couchbase:使用视图查询多个原子计数器文档,c#,couchbase,C#,Couchbase,我的沙发桶里有很多文件。其中一些文档用作原子操作的计数器,因此它们只存储一个数字。所有这些计数器文档在键中都有公共前缀('SomePrefix_u',例如)。如何访问所有这些“带前缀”的文档?它们不会出现在视图中。默认情况下,计数器不会从视图结果中排除。可能您是无意中在mapper中这样做的。例如,这里的mapper考虑了计数器 function (doc, meta) { if (meta.type == 'base64') { emit(meta.id, {counter: de

我的沙发桶里有很多文件。其中一些文档用作原子操作的计数器,因此它们只存储一个数字。所有这些计数器文档在键中都有公共前缀('SomePrefix_u',例如)。如何访问所有这些“带前缀”的文档?它们不会出现在视图中。

默认情况下,计数器不会从视图结果中排除。可能您是无意中在mapper中这样做的。例如,这里的mapper考虑了计数器

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]