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

标签 java mapreduce couchdb cloudant nosql-aggregation

我需要在执行查询时查找文档总数,而不是在 cloudant 中获取文档。

我正在使用 cloudant 客户端 https://github.com/cloudant/java-cloudant 。通常,为了获取文档,我使用“findByIndex()”方法。

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

我不想获取所有文档并在客户端进行计数,因为这会占用所有网络带宽和内存。

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

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

最佳答案

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

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

您可以通过使用浏览器点击以下网址来查看示例查询的原始结果: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();

关于java - 使用cloudant的java客户端如何获取计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29694183/

相关文章:

database - 获取 CouchDB 数据库中的所有文档*除了*设计文档

java - 在java中双击鼠标事件

java - 创建可执行 jar 的多种方法不起作用

java - 返回 LinkedHashMap<K,V> 的方法的签名

java - Activity.java 交叉引用在 Eclipse 中不起作用

hadoop - 我想知道(公式)如何计算 namenode、yarn 和 Resource Manager 的 RAM、CPU 和磁盘内存

hadoop - 运行 Map Reduce 作业时获取 ClassCastException

hadoop - 重启后 HDFS block 损坏

couchdb - 如何让 Couchdb/Cloudant 设计文档准备好搜索所有字段?

ruby-on-rails - 阐明 Elasticsearch 的有用性