0

我有一个定义为:

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 行 - 我错过了什么?

4

2 回答 2

1

我怀疑您的类型不匹配,但是如果不查看视图的行就无法确定。因此,如果我错了,请从您的视图中发布示例行。

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

如果我是正确的,那么“键”应该定义为 List<Integer> (或者在 Java 中看起来)。

于 2011-04-21T16:25:15.743 回答
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()); 
}

现在工作正常。

于 2011-04-26T10:37:27.990 回答