Couchbase 视图是空的
Couchbase View is empty
如果我尝试通过使用 Java SDK 的视图从 Couchbase 服务器检索文档列表,我得到一个空结果列表:
ViewResult result = dataManager.getBucket().query(ViewQuery.from("_design/dev_task", "byID"));
List<ViewRow> rows = result.allRows(); // rows is empty
但是,在 Web 控制台中,同一视图有一个非空的筛选结果列表。另一方面,通过文档 ID 检索可以完美地工作:
JsonDocument taskDocument = dataManager.getBucket().get("task1", JsonDocument.class);
// taskDocument contains the document for task1
查询定义为:
function (doc, meta) {
if (typeof(doc.taskID) == "number") {
emit(doc.taskID, doc);
}
}
并具有以下名称:
我可能做错了什么?
你发表观点了吗?我猜测 SDK 在生产模式下 运行,因此文档检索将在文档存在时工作,但对于视图,它不会像上面的屏幕截图所示那样在开发视图中查找。
好吧,看了this blog entry终于找到解决办法了。问题是 .from
方法的第一个参数:必须避免使用 _design/dev_
前缀。所以不是调用
ViewQuery.from("_design/dev_task", "byID")
我必须使用
ViewQuery.from("task", "byID")
这给我留下了一个非空的行数组!
如果我尝试通过使用 Java SDK 的视图从 Couchbase 服务器检索文档列表,我得到一个空结果列表:
ViewResult result = dataManager.getBucket().query(ViewQuery.from("_design/dev_task", "byID"));
List<ViewRow> rows = result.allRows(); // rows is empty
但是,在 Web 控制台中,同一视图有一个非空的筛选结果列表。另一方面,通过文档 ID 检索可以完美地工作:
JsonDocument taskDocument = dataManager.getBucket().get("task1", JsonDocument.class);
// taskDocument contains the document for task1
查询定义为:
function (doc, meta) {
if (typeof(doc.taskID) == "number") {
emit(doc.taskID, doc);
}
}
并具有以下名称:
我可能做错了什么?
你发表观点了吗?我猜测 SDK 在生产模式下 运行,因此文档检索将在文档存在时工作,但对于视图,它不会像上面的屏幕截图所示那样在开发视图中查找。
好吧,看了this blog entry终于找到解决办法了。问题是 .from
方法的第一个参数:必须避免使用 _design/dev_
前缀。所以不是调用
ViewQuery.from("_design/dev_task", "byID")
我必须使用
ViewQuery.from("task", "byID")
这给我留下了一个非空的行数组!