Docs 菜单
Docs 主页
/ / /
Java Reactive Streams 驱动程序
/

计算文档

在此页面上

  • Overview
  • 样本数据
  • 检索确切计数
  • 对所有文档进行计数
  • 对特定文档进行计数
  • 自定义计数行为
  • 修改计数示例
  • 检索估计计数
  • 自定义估计计数行为
  • 修改估计计数示例
  • API 文档

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

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

重要

项目 Reactor 库

本指南使用 Project ReactorPublisher 库来使用Java Reactive Streams驾驶员方法返回的 实例。要学习;了解有关 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)
Specifies the kind of language collation to use when sorting results. For more information, see Collation in the MongoDB Server manual.
comment(BsonValue comment)
Attaches a BsonValue comment to the operation. For more information, see the insert command fields guide in the MongoDB Server manual.
comment(String comment)
Attaches a String comment to the operation. For more information, see the insert command fields guide in the MongoDB Server manual.
hint(Bson hint)
Sets the index for the operation as a Bson value. For more information, see the hint statement in the MongoDB Server manual.
hintString(String hint)
Sets the index for the operation as a String value. For more information, see the hint statement in the MongoDB Server manual.
limit(int limit)
Sets a limit for the maximum number of documents the cursor returns. For more information, see cursor in the MongoDB Server documentation.
MaxTime(long maxTime, TimeUnit timeUnit)
Sets the maximum execution time on the server for the operation. If the operation does not complete before the time limit, the driver terminates the operation.
skip(int skip)
Sets the number of documents the query skips before returning results. For more information, see skip in the MongoDB Server manual.

以下代码使用countDocuments()方法对restaurants集合中cuisine值为"Italian"的所有文档进行计数。 它还将注释"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)
Attaches a BsonValue comment to the operation. For more information, see the insert command fields guide in the MongoDB Server manual.
comment(String comment)
Attaches a String comment to the operation. For more information, see the insert command fields guide in the MongoDB Server manual.
MaxTime(long maxTime, TimeUnit timeUnit)
Sets the maximum execution time on the server for the operation. If the operation does not complete before the time limit, the driver terminates the operation.

以下代码使用estimatedDocumentCount()方法估计restaurants集合中的文档数。 它还将"Estimated count of all documents"作为String附加到操作。

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

要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档:

后退

指定要返回的文档