题
为什么视图结果在休息和java中不同?例如,从休息它提供了它应该返回的确切结果,但从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"
}
}
.
当我在我的视图中使用Map函数:
function (doc, meta) {
if( (doc.doctype && doc.doctype=="people") && doc.id=="person0"){
emit(doc.id,doc.name);
}
}
.
剩下的结果是:
{"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方法会对视图行进行迭代并迭代ID +文档的地图。
@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
}
.
似乎你的doc id和doc键是相同的,所以你不需要将其发射,因为始终发出键。
不隶属于 StackOverflow