为什么视图结果在休息和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键是相同的,所以你不需要将其发射,因为始终发出键。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top