Couchbase Java API和javascript视图不返回特定Key的值

时间:2013-07-26 19:17:35

标签: javascript couchbase membase

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

1 个答案:

答案 0 :(得分:0)

像这样更改地图功能:

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

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

      emit(doc.table, doc)

注意:这非常重要:

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

有一天,我使用setInclusiveEnd并且它有效。我检查了CouchBase Console 3.0.1的Filter Result对话框中的setInclusiveEnd复选框,我得到了json输出。

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

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

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

<强> EXTRA

如果您的json派生自Java项目中的实体类,请确保包含if statement以测试实体类名称的json字段以包含您emit语句。这样可以避免将密钥作为null发出:

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