【问题标题】:Couchbase View is emptyCouchbase 视图为空
【发布时间】:2015-04-08 10:06:38
【问题描述】:

如果我尝试使用 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);
  }
}

并具有以下名称:

我可能做错了什么?

【问题讨论】:

    标签: java couchbase couchbase-view


    【解决方案1】:

    您是否已发布该视图?我猜测 SDK 正在生产模式下运行,因此文档检索将在文档存在时工作,但对于视图,它不会在开发视图中查看,如上面的屏幕截图所示。

    【讨论】:

    • 该视图尚未发布。如何查看 SDK 运行的模式?我尝试使用System.setProperty("viewmode", "development"); 设置环境变量。然而,这并没有改变任何东西。
    • 如果我没记错的话,通常它默认为生产模式,你可以在启动日志中看到 SDK 将注销它所处的模式。我只是发布视图,看看它是否可以工作,如果确实如此,那么问题就解决了,如果不是,至少我们可以将其他问题视为问题。
    • 控制台没有提到任何模式。所以我只是发表了观点,并没有注意到任何行为变化; rows 仍然为空。您还有其他想法吗?
    【解决方案2】:

    好的,看了this blog entry,终于找到了解决办法。问题是.from 方法的第一个参数:必须避免_design/dev_ 前缀。所以不要打电话

    ViewQuery.from("_design/dev_task", "byID")
    

    我必须使用

    ViewQuery.from("task", "byID")
    

    这给我留下了一个非空的行数组!

    【讨论】:

    • 这两行一模一样
    • @DanLevin 感谢您的评论。我修复了第二行。
    • np,不幸的是,我仍然收到未找到视图的错误 :( 有什么想法吗?
    • 嗯...目前,我不再积极参与 Couchbase。所以,我的知识已经“生锈了”。您是否尝试过涉及可扩展性的答案?您也可以在新帖子中发布您自己的问题,以获得更有经验的用户的意见。
    • 确保您正在查询生产视图(即已发布的开发视图)。此外,请确保在使用好名称时:开发视图通常具有 dev_ 前缀,而生产视图通常具有 design_ 前缀。您可以不使用任何前缀查询生产视图。
    猜你喜欢
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    相关资源
    最近更新 更多