単純な問題だと思っていたものに対処するのに苦労しています。基本的に、java.util.Map<String, String>
IDがマップキーになりsomeField
、ドキュメントの値が最終的になる、が必要です。
私は本当にこれに固執しています、それは私を大いに驚かせます。別のビューを書いてみました:
@View(map="function(d) { if (d.someField) { emit(d.someField, null); } }", name = "someField")
次に、次のJavaを使用します。
public Map<String, String> getSomeFields() throws JsonParseException, JsonMappingException, IOException {
ViewQuery q = new ViewQuery().designDocId("_design/" + entity.getSimpleName()).viewName("someField");
String result = StreamUtils.inputStreamAsString(db.queryForStream(q), false);
TypeReference<Map<String, String>> mapTypeRef = new TypeReference<Map<String,String>>() {};
// mapper is a Jackson ObjectMapper
return mapper.readValue(result, mapTypeRef);
}
これはすでに本当に醜いですが、実際には機能しません。queryForStream
返されるJSONの結果には、クエリの結果だけでなく、他のランダムなものが含まれているようです。これにより、readValue
呼び出しは。をスローしIOException
ます。
また、これらすべての値を含む単一のオブジェクトを生成するためにを使用reduce
してみましたが、その結果、Couchはreduceが十分に減少しないと文句を言います...