0

我在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) 时,它会返回所有表,我在这里缺少什么.. 如何更改函数以仅反映键中提到的表名

4

1 回答 1

0

像这样更改地图功能:

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

最好不要发出整个文档,例如:

      emit(doc.table, doc)

注意:这非常重要:

我已经尝试setKey("key")在 Java 项目中多次使用并使用 CouchBase Console 3.0.1 的Filter Result对话框设置密钥,但没有返回任何内容。

有一天,我用setInclusiveEnd了,它奏效了。我检查了 CouchBase 控制台 3.0.1Filter 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);
      }
于 2015-01-15T07:58:14.460 回答