计算文档
Overview
在本指南中,您可以学习;了解如何检索集合中文档数量的精确计数和估计计数。
样本数据
本指南中的示例使用 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 文档
要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档: