如何使用couchbase中的视图获取文档

时间:2014-02-08 15:42:15

标签: couchbase couchbase-view

我有一个要求,其中我从couchbase获取文档。

在Map函数中跟随我使用的相同 -

function (doc, meta) {
   if (meta.type == "json" && doc!=null) {
     emit(doc);
   }
}

没有减少功能。以下是我获取文档的java代码 -

  List<URI> hosts = Arrays.asList(
            new URI("http://<some DNS with port>/pools")
    );

    // Name of the Bucket to connect to
    String bucket = "Test-Sessions";

    // Password of the bucket (empty) string if none
    String password = "";
    //System.setProperty("viewmode", "development");
    // Connect to the Cluster
    CouchbaseClient client = new CouchbaseClient(hosts, bucket, password);


    String designDoc = "sessions";
    String viewName = "by_test";
    View view = client.getView(designDoc, viewName);
    Query query = new Query();
    query.setIncludeDocs(true);
    query.setKey(String.valueOf(122));
    ViewResponse result = client.query(view, query);
    Object object = null;
    for(ViewRow row : result) {
        if(null != row) {
        object = row.getDocument();
        }// deal with the document/data
    }
    System.out.println("Object" + object);

我在couchbase中的数据是关键 - “122”和值 - “真实”。但由于某种原因,我没有在ViewResponse中获得任何行。什么出错可以有人帮忙吗?

1 个答案:

答案 0 :(得分:2)

我不明白你在这里想要实现的目标,你正在使用一个视图来获取文档的关键?键== 122?为什么你不能只做client.get(122)?

如果你只需要一个桶中所有键的列表(你可以用它来通过包含文档撤回所有文件),那就按照这样的方式制作你的函数:

 function (doc, meta) {
    if (meta.type == "json") {
      emit();
    }
 }

文档的键始终作为ID(viewRow.getId())发出。您不需要发出文档,尝试尽可能少地发出数据以保持视图大小不变。

如果您需要操作存储桶中的所有文档,请注意随着大小的增加,也许您需要查看分页以循环显示结果。 http://tugdualgrall.blogspot.com.es/

此外,一旦你有ViewResponse循环,就像这样:

for(ViewRow row : result) {
  row.getDocument(); // deal with the document/data
}

您无需在行上检查null。