我正在尝试从 java 对我在 CouchDB 上创建的 Map/Reduce 视图执行查询。我的地图功能如下所示:
function(doc) {
if(doc.type == 'SPECIFIC_DOC_TYPE_NAME' && doc.userID){
for(var g in doc.groupList){
emit([doc.userID,doc.groupList[g].name],1);
}
}
}
和减少功能:
function (key, values, rereduce) {
return sum(values);
}
从 Futon 界面执行时,该视图似乎正在工作(尽管没有指定键)。我要做的是计算属于单个组的某些文档类型的数量。我想使用“userID”和组名作为键来查询该视图。
我正在使用 Ektorp 库来管理 CouchDB 数据,如果我在没有键的情况下执行此查询,它会返回标量值,否则它只会打印一个错误,说明必须指定 reduce 查询 group=true。
我尝试了以下方法:
ViewQuery query = createQuery("some_doc_name");
List<String> keys = new ArrayList<String>();
keys.add(grupaName);
keys.add(uzytkownikID);
query.group(true);
query.groupLevel(2);
query.dbPath(db.path());
query.designDocId(stdDesignDocumentId);
query.keys(keys);
ViewResult r = db.queryView(query);
return r.getRows().get(0).getValueAsInt();
上面的示例在没有指定“键”的情况下工作。我还有其他使用 ComplexKey 的查询,例如:
ComplexKey key = ComplexKey.of(userID);
return queryView("list_by_userID",key);
但这仅返回 T 类型(列表)的列表 - 当然使用 CouchDbRepositorySupport - 并且不能与减少类型查询一起使用(据我所知)。
有没有什么方法可以使用 Ektorp 库在指定 reduce 函数和具有 2 个或更多值的复杂键的情况下执行查询?任何例子都受到高度赞赏。