文档菜单
文档首页
/ / /
C#/.NET
/ / /

计数文档

在本页面上

  • 概述
  • 精确计数
  • 估计计数
  • 聚合
  • 其他信息

在本指南中,您可以学习如何获取准确估计您集合中文档数量的计数。

本指南中的示例使用名为“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对象中设置以下属性

属性
描述

Collation

在排序结果时使用的语言排序类型。
默认值:null

提示

用于扫描文档进行计数的索引。
默认值: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() 方法。

注意

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

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

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

属性
描述

MaxTime

查询在服务器上运行的最大时间。
默认值: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()构建方法来计算聚合管道中的文档数量。

以下示例执行以下操作

  • 指定一个匹配阶段以找到具有大于80FinalGrade值的文档

  • 计算符合标准的文档数量

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 文档

返回

指定返回字段