gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:07:56 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com