0
# creating the view
var designDocContents =
@"{
    ""views"" : {
        ""all_docs"" : {
            ""map"" : ""function (doc, meta) {\n  emit(doc.name, [doc.version, doc.type, doc.date]);\n }""
        }
    }
}";
var result = _cluster.CreateDesignDocument(_bucketName, "dev_all_docs", designDocContents);

在调试时从我的 Visual Studio 即时窗口:

# trying to get the created view and read values from it
couchbaseClient.GetView("dev_all_docs", "all_docs").GetEnumerator().MoveNext();
    false
couchbaseClient.GetView("dev_all_docs", "all_docs").GetEnumerator().MoveNext();
    true

如您所见,完全相同的代码行 (couchbaseClient.GetView...) 在第一次调用时返回 false,在第二次调用时返回 true。我在创建视图后尝试添加睡眠,但这并没有解决它,所以它似乎不是时间问题。

我发现了一个似乎有些相关的问题: Couchbase .Net 客户端库 GetView 缓存问题 但是问题答案的以下更改也没有解决它:

couchbaseClient.GetView("dev_all_docs", "all_docs").Stale(StaleMode.False);
4

1 回答 1

1

我想到了。该问题已通过从使用开发视图切换到生产视图来解决。仔细查看 Couchbase 视图文档是关键。 http://docs.couchbase.com/couchbase-manual-2.2/#development-and-production-views

我将代码更改为以下内容:

# creating the view
var designDocContents =
@"{
    ""views"" : {
        ""all_docs"" : {
            ""map"" : ""function (doc, meta) {\n  emit(doc.name, [doc.version, doc.type, doc.date]);\n }""
        }
    }
}";
var result = _cluster.CreateDesignDocument(_bucketName, "all_docs", designDocContents);

在 Visual Studio 即时窗口中:

couchbaseClient.GetView("all_docs", "all_docs").GetEnumerator().MoveNext();
true

所以在代码中从视图名称中删除“dev_”前缀就可以了。

于 2014-07-03T07:28:57.447 回答