Query View不会返回couchdb中的任何值

时间:2011-04-21 14:47:41

标签: java couchdb ektorp

我将视图定义为:

function(doc) 
{ 
    if (doc.type="user")
    {
        emit([doc.uid, doc.groupid], null);
    } 
}

在Java代码中,我写了

List<String> keys = new ArrayList<String>();
keys.add("93");
keys.add("23");
ViewQuery q = createQuery("getProfileInfo").descending(true).keys(keys).includeDocs(true);
ViewResult vr = db.queryView(q);
List<Row> rows = vr.getRows();
for (Row row : rows) {
  System.out.println("Key--->"+row.getKey());
  System.out.println("Value--->"+key);
}

我的代码总是返回0行 - 我错过了什么?

2 个答案:

答案 0 :(得分:1)

我怀疑你的类型不匹配,但如果没有看到视图的行,就无法确定。所以,如果我错了,请在您的视图中发布一个示例行。

'keys'在发送到CouchDB之前被编码为JSON。你要添加两个字符串 - “93”和“23” - 但我猜它们实际上是文件中的整数。在JSON中,字符串和整数的编码方式不同。一对字符串被编码为[“93”,“23”],一对整数被编码为[93,23]。

如果我是正确的,那么'keys'应该被定义为List&lt; Integer&gt; (或者用Java看起来。)

答案 1 :(得分:1)

将代码修改为

ComplexKey keys = ComplexKey.of(“93”,”23”);
ViewQuery q = createQuery("getProfileInfo").descending(true).key(keys).includeDocs(true); 
ViewResult vr = db.queryView(q); 
List<Row> rows = vr.getRows(); 
for (Row row : rows) { 
  System.out.println("Key--->"+row.getKey()); 
  System.out.println("Value--->"+row.getValue()); 
}

现在工作正常。