java - Couchbase View 结果与 JAVA 和 REST 不同

标签 java couchbase

为什么REST和Java中 View 的结果不同?例如,从 REST 中,它给出了应该返回的准确结果,但从 Java 中,它将返回特定键的整个文档。 我有这个文件:

{
  "doctype": "people",
  "id": "person0",
  "name": "Kasidit Treweek",
  "homepage": "http://www.cohera.com/~Treweek",
  "creditcard": "9941 9701 2489 4716",
  "profile": {
    "income": 20186.59,
    "interest": [
      {
        "category": "category251"
      }
    ],
    "education": "Graduate School",
    "business": "No"
  }
}

当我在 View 中使用 map 功能时:

function (doc, meta) {
   if( (doc.doctype && doc.doctype=="people") && doc.id=="person0"){
    emit(doc.id,doc.name);     
    }

}

REST 的结果是:

{"total_rows":1,"rows":[
{"id":"person0","key":"person0","value":"Kasidit Treweek"}
]
}

但是从 Java 中,它将返回带有键“person0”的整个文档,如

{"person0":{"doctype": "people",.....}}

这是我简单实现的java代码:

ViewResponse response = client.query(view, query);
java.util.Map<String, Object> map = response.getMap();

最佳答案

这是因为您使用的是 ViewResponseWithDocs,getMap 方法会执行此操作并迭代 View 行并构建 id + 文档的 map 。

@Override
public Map<String, Object> More ...getMap() {
if (map == null) {
 map = new HashMap<String, Object>();
 Iterator<ViewRow> itr = iterator();

  while(itr.hasNext()) {
  ViewRow cur = itr.next();
  map.put(cur.getId(), cur.getDocument());
  }
}
return Collections.unmodifiableMap(map);
}

你想做的是这样的:

for (ViewRow viewRow : viewResponse) {
 viewRow.getKey();
 viewRow.getId();
 viewRow.getValue();
 //Logic for above information here
}

此外,您的文档 ID 和文档 key 似乎是同一件事,因此您不需要发出它,因为 key 始终会发出。

关于java - Couchbase View 结果与 JAVA 和 REST 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21047102/

相关文章:

java - 在heroku上部署jhipster时出现sql驱动程序问题

java - 格式化 slf4j 以记录带有颜色的消息类型

go - 区分子文档操作错误和特定路径上丢失的数据

当节点宕机时 Couchbase 会爬行吗?不应该很快就失败吗?

c# - Couchbase 错误打开存储桶 - 无法引导

java - Java 中的异步 File.copy

java - 屏幕密度相关产品口味的源代码的正确方法

java - 在枚举的构造函数中访问其他枚举

couchbase - 在没有 View 的情况下迭代 couchbase 键

amazon-web-services - 如何为运行 COUCHBASE 2.1.1 社区 AMI 的 EC2 实例添加主机名?