计数文档
概述
在本指南中,您可以学习如何获取准确和估计您集合中文档数量的计数。
示例数据
本指南中的示例使用名为“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
将集合中的字段反序列化为帕斯卡大小写,并将其映射到Student
类的属性中。
要了解有关自定义序列化的更多信息,请参阅自定义序列化.
准确计数
要统计与您的查询过滤器匹配的文档数量,请使用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);
Number of documents with a final grade less than 80: 2
修改行为
您可以通过传递一个CountOptions
类型作为参数来修改CountDocuments()
的行为。如果您没有指定任何选项,则驱动程序使用默认值。
您可以在CountOptions
对象中设置以下属性
属性 | 描述 |
---|---|
| 在排序结果时使用的语言排序类型。 默认值: null |
| 用于扫描文档进行计数的索引。 默认值: null |
| 要计数的最大文档数。 默认值: 0 |
| 查询在服务器上运行的最大时间。 默认值: null |
| 在计数之前要跳过的文档数。 默认值: 0 |
提示
当使用CountDocuments()
返回集合中的总文档数时,MongoDB会执行集合扫描。您可以通过使用提示来利用_id
字段的内置索引来避免集合扫描并提高此方法的性能。仅在带有空查询参数调用CountDocuments()
时使用此技术。
var filter = Builders<Student>.Filter.Empty; CountOptions opts = new CountOptions(){Hint = "_id_"}; var count = collection.CountDocuments(filter, opts);
估计文档数量
为了估计您集合中的文档总数,请使用 EstimatedDocumentCount()
方法。
注意
与 CountDocuments()
方法相比,EstimatedDocumentCount()
方法效率更高,因为它使用集合的元数据,而不是扫描整个集合。
修改行为
您可以通过传递一个 EstimatedDocumentCountOptions
类型作为参数来修改 EstimatedDocumentCount()
的行为。如果您不指定任何选项,驱动程序将使用默认值。
您可以在一个 EstimatedDocumentCountOptions
对象中设置以下属性
属性 | 描述 |
---|---|
| 查询在服务器上运行的最大时间。 默认值: null |
示例
以下示例估计 students
集合中的文档数量
var count = _myColl.EstimatedDocumentCount(); Console.WriteLine("Estimated number of documents in the students collection: " + count);
Estimated number of documents in the students collection: 6
聚合
您可以使用Count()
构建方法来计算聚合管道中的文档数量。
示例
以下示例执行以下操作
指定一个匹配阶段以找到具有大于
80
的FinalGrade
值的文档计算符合标准的文档数量
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);
Number of documents with a final grade more than 80: 4
更多信息
有关所述操作的更多信息,请参阅以下指南
API 文档
有关本指南中讨论的任何方法或类型的更多信息,请参阅以下 API 文档