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

本文关键字:返回 结果 调用 第一次 SDK GetView net | 更新日期: 2023-09-27 18:11:04

# 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 Immediate窗口中调试:

# 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);

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

我明白了。通过从使用开发视图切换到使用生产视图,这个问题得到了解决。仔细查看Couchbase视图文档是关键。http://docs.couchbase.com/couchbase手册- 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_"前缀就成功了。