Couchbase .NET SDK GetView在第一次调用时返回空结果

时间:2014-07-02 12:27:26

标签: c# .net couchbase getview

# 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 client library GetView caching issue 但是问题答案的以下变化也没有解决它:

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

1 个答案:

答案 0 :(得分: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 _"视图名称中的前缀起到了作用。