为什么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/