对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。

计算文档

本指南中,您可以了解如何获取集合中文档数量准确和估计计数。

本指南中的示例使用名为 students 的集合中的以下文档:

{ "_id": 1, "name": "Jonathon Howard ", "finalGrade": 87.5 }{ "_id": 2, "name": "Keisha Freeman", "finalGrade": 12.3 }{ "_id": 3, "name": "Wei Zhang", "finalGrade": 99.0 }{ "_id": 4, "name": "Juan Gonzalez", "finalGrade": 85.5 }{ "_id": 5, "name": "Erik Trout", "finalGrade": 72.3 }{ "_id": 6, "name": "Demarcus Smith", "finalGrade": 88.8 }

以下 Student 类对此集合中的文档进行建模:

public class Student { public int Id { get; set; } public string Name { get; set; } public double FinalGrade { get; set; }}

注意

students 集合中的文档使用驼峰命名约定。本指南中的示例使用 ConventionPack 将集合中的字段反序列化为 Pascal 语句,然后映射到 Student 类中的属性。

如需了解有关自定义序列化的更多信息,请参阅“自定义序列化”。

要统计与您的查询筛选器匹配的文档数量,请使用 CountDocuments() 方法。如果传递空查询筛选器,则该方法将返回集合中的文档总数。

CountDocuments() 方法在服务器上运行聚合操作,以统计匹配的文档。

以下示例计算其中的 finalGrade 值小于 80 的文档数:

var filter = Builders<Student>.Filter.Lt(s => s.FinalGrade, 80.0);var count = _myColl.CountDocuments(filter);Console.WriteLine("Number of documents with a final grade less than 80: " + count);

您可以通过将 CountOptions 类型作为参数传入来修改 CountDocuments() 的行为。如果不指定任何选项,驱动程序将使用默认值。

您可以在 CountOptions 对象中设置以下属性:

属性
说明

Collation

对结果进行排序时要使用的语言排序规则类型。
默认:null

Hint

用于扫描要计数的文档的索引。
默认:null

Limit

要计数的最大文档数。
默认:0

MaxTime

查询在服务器上运行的最长时间。
默认:null

Skip

计数前要跳过的文档数。
默认:0

提示

当你使用 CountDocuments() 返回集合中的文档总数时,MongoDB 会执行集合扫描。你可以使用提示来利用 _id 字段的内置索引,从而避免集合扫描并改进此方法的性能。仅当使用空查询参数调用 CountDocuments() 时才使用此技术。

var filter = Builders<Student>.Filter.Empty;CountOptions opts = new CountOptions(){Hint = "_id_"};var count = collection.CountDocuments(filter, opts);

要估计集合中的文档总数,请使用 EstimatedDocumentCount() 方法。

注意

EstimatedDocumentCount() 方法比 CountDocuments() 方法更高效,因为它会使用集合的元数据而不是扫描整个集合。

您可以通过将 EstimatedDocumentCountOptions 类型作为参数传入来修改 EstimatedDocumentCount() 的行为。如果不指定任何选项,驱动程序将使用默认值。

您可以在 EstimatedDocumentCountOptions 对象中设置以下属性:

属性
说明

MaxTime

查询在服务器上运行的最长时间。
默认:null

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

var count = _myColl.EstimatedDocumentCount();Console.WriteLine("Estimated number of documents in the students collection: " + count);

警告

Count() 和 CountAsync() 已弃用

Count() 和 CountAsync() 方法使用已弃用的 数据库命令 count,现已弃用,并计划在未来的驱动程序版本中删除。请改用 CountDocuments()、EstimatedDocumentCount() 或等效的异步方法。

您可以使用 Count() 构建其方法来计算聚合管道中的文档数量。

以下示例执行以下动作:

  • 指定匹配阶段,以查找 FinalGrade 值大于 80 的文档

  • 统计符合条件的文档数量

var filter = Builders<Student> .Filter.Gt(s => s.FinalGrade, 80);var result = _myColl.Aggregate().Match(filter).Count();Console.WriteLine("Number of documents with a final grade more than 80: " + result.First().Count);

要了解有关提到的操作的更多信息,请参阅以下指南:

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