文档菜单
文档首页
/ / /
Java反应式流驱动程序
/

计算文档数

在本页面上

  • 概述
  • 示例数据
  • 获取精确计数
  • 计数所有文档
  • 计数特定文档
  • 自定义计数行为
  • 修改计数示例
  • 获取估算计数
  • 自定义估算计数行为
  • 修改估算计数示例
  • API 文档

在本指南中,您可以学习如何检索集合中文档数量的精确和估算计数。

本指南中的示例使用的是sample_restaurants.restaurants 集合,来自Atlas 示例数据集。要了解如何创建免费的 MongoDB Atlas 集群并加载示例数据集,请参阅入门.

重要

项目 Reactor 库

本指南使用 Project Reactor 库来消费由 Java 反应式流驱动方法返回的 Publisher 实例。要了解 Project Reactor 库及其使用方法,请参阅 Reactor 文档中的 入门。要了解本指南中如何使用 Project Reactor 库的方法,请参阅 写入 MongoDB 数据 指南。

使用 countDocuments() 方法来计算集合中的文档数量。要计算匹配特定搜索条件的文档数量,将查询过滤器传递给 countDocuments() 方法。

要了解如何指定查询,请参阅 指定查询。

要返回集合中所有文档的数量,请调用 countDocuments() 方法,不传递任何参数,如下例所示

Publisher<Long> countPublisher = restaurants.countDocuments();
Mono.from(countPublisher).doOnNext(System.out::println).blockLast();

要返回匹配特定搜索条件的文档数量,请在 countDocuments() 方法中指定查询,如下例所示。有关如何指定查询的更多信息,请参阅 指定查询 指南。

Publisher<Long> countPublisher = restaurants.countDocuments(
eq("cuisine", "Italian"));
Mono.from(countPublisher)
.doOnNext(System.out::println)
.blockLast();

您可以通过向方法传递可选参数来修改 countDocuments() 方法的行为。CountOptions 类提供了修改 countDocuments() 方法行为的方法。要使用 CountOptions 类,构造一个新的类实例,然后调用一个或多个其方法以修改计数操作。您可以将这些方法调用链式连接起来。

要修改计数操作的行为,将类实例和链式方法调用作为最后一个参数传递给 countDocuments() 方法。

以下表格描述了《CountOptions》类中的方法

方法
描述
collation(Collation collation)
指定排序结果时使用的语言排序类型。有关更多信息,请参阅MongoDB服务器手册中的排序
comment(BsonValue comment)
BsonValue注释附加到操作。有关更多信息,请参阅MongoDB服务器手册中的插入命令字段指南。
comment(String comment)
String注释附加到操作。有关更多信息,请参阅MongoDB服务器手册中的插入命令字段指南。
hint(Bson hint)
将操作索引设置为Bson值。有关更多信息,请参阅MongoDB服务器手册中的提示语句
hintString(String hint)
将操作索引设置为String值。有关更多信息,请参阅MongoDB服务器手册中的提示语句
limit(int limit)
设置游标返回的最大文档数限制。有关更多信息,请参阅MongoDB服务器文档中的游标
MaxTime(long maxTime, TimeUnit timeUnit)
设置服务器上操作的最多执行时间。如果操作在时间限制之前未完成,则驱动程序终止操作。
skip(int skip)
设置查询在返回结果之前跳过的文档数。有关更多信息,请参阅MongoDB服务器手册中的skip

以下代码使用countDocuments()方法来计算具有cuisine值为"Italian"restaurants集合中的所有文档。它还将注释"Count all Italian restaurants"作为String附加到操作中。

Publisher<Long> countPublisher = restaurants.countDocuments(
eq("cuisine", "Italian"),
new CountOptions().comment("Count all Italian restaurants"));
Mono.from(countPublisher)
.doOnNext(System.out::println)
.blockLast();

您可以通过调用 estimatedDocumentCount() 方法来获取集合中文档数量的估算值。该方法根据集合元数据估计文档数量,可能比执行精确计数更快。

以下示例估计集合中文档的数量

Publisher<Long> countPublisher = restaurants.estimatedDocumentCount();
Mono.from(countPublisher)
.doOnNext(System.out::println)
.blockLast();

您可以通过向方法传递可选参数来修改 estimatedDocumentCount() 方法的行为。EstimatedDocumentCountOptions 类提供了修改 estimatedDocumentCount() 方法行为的方法。要使用 EstimatedDocumentCountOptions 类,创建该类的新实例,然后调用一个或多个其方法来修改计数操作。您可以链接这些方法调用。

要修改计数操作的行为,将类实例和链接的方法调用作为唯一参数传递给 estimatedDocumentCount() 方法。

以下表格描述了您可以设置的选项以自定义 estimatedDocumentCount()

属性
描述
comment(BsonValue comment)
BsonValue注释附加到操作。有关更多信息,请参阅MongoDB服务器手册中的插入命令字段指南。
comment(String comment)
String注释附加到操作。有关更多信息,请参阅MongoDB服务器手册中的插入命令字段指南。
MaxTime(long maxTime, TimeUnit timeUnit)
设置服务器上操作的最多执行时间。如果操作在时间限制之前未完成,则驱动程序终止操作。

以下代码使用estimatedDocumentCount()方法来估算restaurants集合中的文档数量。它还将“所有文档的估计数量”作为String附加到操作中。

Publisher<Long> countPublisher = restaurants.estimatedDocumentCount(
new EstimatedDocumentCountOptions()
.comment("Estimated count of all documents"));
Mono.from(countPublisher)
.doOnNext(System.out::println)
.blockLast();

要了解更多关于本指南中讨论的任何方法或类型,请参阅以下API文档

返回

指定要返回的文档