Вам нужно будет предварительно проанализировать вывод из CouchDB, так как нет способа избежать возврата всех этих метаданных с запросом.
Во-первых, ваше представление должно излучать правильные данные (идентификатор объекта и его значение).
@View(map="function(d) { if (d.someField) { emit(d.id, d.someField); } }", name = "someField")
Форма ответа - это объект JSONСтрока => Объект.Я хотел бы начать с отображения всего ответа на этот вопрос, а затем выбрать объект с ключом «строки», который является массивом JSON.Каждый элемент в этом массиве является другим объектом JSON с ключами «id», «key», «value».Затем вам нужно будет сопоставить каждый из этих объектов с парой ключ-значение в ваших выходных данных.
public Map<String, String> getSomeFields()
throws JsonParseException, JsonMappingException, IOException {
ViewQuery q =
new ViewQuery().designDocId("_design/" +
entity.getSimpleName()).viewName("someField");
String queryRresult =
StreamUtils.inputStreamAsString(db.queryForStream(q), false);
TypeReference<Map<String, Object>> mapTypeRef =
new TypeReference<Map<String,Object>>() {};
TypeReference<List<Map<String,String>>> rowsTypeRef =
new TypeReference<List<Map<String,String>>>() {};
// Map of the top level results which includes the couch meta and the
// rows. We have to use object, because Each value is of a different
// type (string, ints, json objects)
Map<String,Object> topResultMap =
mapper.readValue(queryRresult, mapTypeRef);
// Once we have the top level result, cast the value for key "rows" as
// String, and parse it as a rows type, which is a list of maps.
List<Map<String,String>> rows =
mapper.readValue((String) topResultMap.get("rows"), rowsTypeRef);
// Finally iterator over that list pulling out the id and the value in
// the key and value for the results
Map<String,String> results = new HashMap<String,String>();
for (Map<String,String> row : rows)
results.put(row.get("id"), row.get("value"));
// And return them
return results;
}
Наконец, вам нужно убедиться, что у вас нет уменьшенной части вашего представления CouchDB.Если вы это сделаете, вы должны передать «Reduce = false» через диван.