如何在使用 cloudant 的 java 客户端时获取计数?

How to obtain count while using java client of cloudant?

我需要在不在 cloudant 中获取文档的情况下执行查询时查找文档总数。

我正在使用 cloudant 客户端 https://github.com/cloudant/java-cloudant。通常我使用 "findByIndex()" 方法获取文件。

现在我的要求是"only" findByIndex() 的第一个参数中指定的选择器可以获取的文档总数。

我不想获取所有文档并在客户端计算它们,因为那样会占用所有网络带宽和内存。

从搜索中我确实看到它可以通过这里给出的 reduce 函数实现: http://guide.couchdb.org/editions/1/en/cookbook.html#aggregate

但是如何在 java cloudant 客户端上使用这个 reduce 函数?还有其他方法可以实现吗?

查询视图的文档是https://github.com/cloudant/java-cloudant#query-on-a-view

我快速 运行 使用 groovysh(使用 java api)针对 cloudant 教育帐户的 animaldb 的示例。

您可以通过在浏览器中点击 url 查看示例查询的原始结果:https://education.cloudant.com/animaldb/_design/views101/_view/diet_count?reduce=true&group=true&key=%22omnivore%22

{"rows":[
   {"key":"omnivore","value":3}
]}

groovy 程序(注意使用 Grape 的前两行只是为了引入 cloudant java 库):

groovy:000> import groovy.grape.Grape
groovy:000> Grape.grab(group:'com.cloudant', module:'cloudant-client', version:'1.0.1')
groovy:000> import com.cloudant.client.api.CloudantClient
groovy:000> client = new CloudantClient('education', 'education')
groovy:000> db = client.database('animaldb', false)
groovy:000> omnivores = db.view("views101/diet_count").key('omnivore').queryForInt()
===> 3

这是等效的 java 代码:

CloudantClient client = new CloudantClient('education', 'education');
Database db = client.database('animaldb', false);
int omnivores = db.view("views101/diet_count").key('omnivore').queryForInt();

findByIndex 函数使用 Cloudant 查询索引。此索引类型目前不支持返回结果总数。

link http://guide.couchdb.org/editions/1/en/cookbook.html#aggregate 指的是视图,这是 Cloudant 上的一种不同类型的索引。 Reduces 仅适用于视图,不适用于查询索引。正如 Chris Snow 建议的那样,您需要使用视图来通过 reduce 有效地获取总数。

不幸的是,您不能在视图中使用正则表达式(您提到了您的 Cloudant 查询选择器使用的视图)。但是,也许您可​​以在视图的 map 函数中创建一个键,该键允许执行相同的查询。