0

嗨,我想通过应用 reduce 和 pagination 从 couchdb-view 获取数据。

我的观点将reduce函数结果作为复杂键给出如下

{"rows":[
         {"key":{"attribute":"Attribute1"},"value":20},
         {"key":{"attribute":"Attribute2"},"value":1}
         {"key":{"attribute":"Attribute3"},"value":1}
]}

我正在尝试使用 ektorp 从 couchdb 获取数据,请检查以下代码

PageRequest pageRequest = PageRequest.firstPage(10);
ViewQuery query = new ViewQuery()
            .designDocId("_design/medesign")
            .viewName("viewname")
            .includeDocs(false)
            .reduce(true)
            .group(true);
Page<ViewResult> rs1 = db.queryForPage(query, pageRequest, ViewResult.class);

rs1.forEach(v -> {
            System.out.println(v.getSize());
        });

我收到以下错误

org.ektorp.DbAccessException: com.fasterxml.jackson.databind.JsonMappingException: 
Can not construct instance of org.ektorp.ViewResult: 
no int/Int-argument constructor/factory method to deserialize from Number value (20)
at [Source: N/A; line: -1, column: -1]
4

1 回答 1

0

如果您想要分页减少数据,CouchDB 不会提供分页详细信息。

请求分页包含文档
group=false & reduce=false & include_docs=true

网址:http://localhost:5984/dn_anme/_design/design_name/_view/viewname?include_docs=true&reduce=false&skip=0&group=false&limit=2

回复 :

{
   "total_rows":81,
   "offset":0,
   "rows":[
      {
         "id":"906a74b8019716f1240a7117580ec172",
         "key":{
            "attribute":"BuildArea"
         },
         "value":1,
         "doc":{
            "_id":"906a74b8019716f1240a7117580ec172",
            "_rev":"3-7e0a1da0c2260040f8a9787636385785",
            "country":"POL",            
            "recordStatus":"MATCHED"
         }
      },
      {
         "id":"906a74b8019716f1240a7117580eaefb",
         "key":{
            "attribute":"Area",
         },
         "value":1,
         "doc":{
            "_id":"906a74b8019716f1240a7117580eaefb",
            "_rev":"3-165ea3a3ed07ad8cce1f3e095cd476b5",
            "country":"POL",
            "recordStatus":"MATCHED"
         }
      }
   ]
}

请求减少 group=true& reduce=true& include_docs=false

网址:http://localhost:5984/dn_anme/_design/design_name/_view/viewname?include_docs=false&reduce=true&group=true&limit=2

回应:

{
   "rows":[
      {
         "key":[
            "BuildArea"
         ],
         "value":1
      },
      {
         "key":[
            "Area"
         ],
         "value":1
      }
   ]
}

两个请求之间的区别:
带有分页包含文档的请求提供页面数据{"total_rows":81, "offset":0, rows":[{...},{...}]} 请求减少给{"rows":[{...},{..}]}

如何获得分页减少数据:

第 1 步:从视图中请求 rows_per_page + 1 行
第 2 步:如果响应中多出一条记录而不是 page_size 则有更多记录
第 3 步:计算并更新跳过值并到达第 1 步的下一页
注意:添加跳过不好大量记录的选项,而不是找到开始键并添加开始键,它有利于更好的性能

于 2018-01-17T11:02:00.267 回答