Couchbase Java API和javascript视图未返回特定密钥的值

Couchbase Java API and javascript view not returning value for a specific Key

本文关键字:密钥 返回 API Java javascript 视图 Couchbase      更新时间:2023-09-26

我在java 中使用couchbase API

View view = client.getView("dev_1", "view1");
    Query query = new Query();
    query.setIncludeDocs(true);
    query.setKey(this.Key);
    ViewResponse res=client.query(view, query);
    for(ViewRow row: res)   
    {
          // Print out some infos about the document
        a=a+" "+row.getKey()+" : "+row.getValue()+"<br/>";
    }
    return a;

以及couchbase中的java脚本视图

function (doc,meta) {
  emit(meta.id,doc);
}

所以,当我删除语句query.setkey(this.Key)时,它会返回所有的表,我在这里缺少什么。。如何更改函数以仅引用键中提到的表名

像这样更改映射函数:

      function (doc,meta) {
           emit(doc.table,null);
      }

最好不要像那样发出整个文档

      emit(doc.table, doc)

注意:这非常重要:

我在Java项目中多次尝试使用setKey("key"),并使用CouchBaseConsole3.0.1的Filter Result对话框设置密钥,但都没有返回。

有一天,我用了setInclusiveEnd,它成功了。我在CouchBase控制台3.0.1的Filter Result对话框中选中了setInclusiveEnd复选框,得到了json输出。

    query.setKey("whatEverKey");
    query.setInclusiveEnd(true);

我希望这能对其他有同样问题的人有所帮助。如果有人找到了另一条出路,请随时添加评论。

我不知道为什么他们的文档没有具体说明这一点。

额外

如果您的json是从Java项目中的实体类派生的,请确保包含一个if statement来测试实体类名的json字段,以包含emit语句。这将避免密钥以null:的形式发出

      if(doc._class == "path.to.Entity") {
          emit(doc.table, null);
      }