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

聚合操作

在本指南中,您可以了解如何使用 MongoDB .NET/C# 驱动程序以执行聚合操作

聚合操作会对 MongoDB 集合中的数据进行处理,并返回计算结果。MongoDB 聚合框架以数据处理管道的概念为模型。文档通过一个或多个阶段组成的管道流转,该管道将文档转化为聚合结果。

要学习;了解有关.NET/ C#驱动程序支持的聚合阶段的更多信息,请参阅聚合阶段。

提示

完成聚合教程

您可以在服务器手册的完整聚合管道教程部分找到详细解释常见聚合任务的教程。选择一个教程,然后从页面右上角的 Select your language 下拉菜单中选择 C#

聚合操作的功能类似于带有装配线的汽车工厂。 装配线设有配备专用工具的工位来执行特定任务。 例如,在制造汽车时,装配线从制造车架开始。 然后,当车架移动通过装配线时,每个工位都会组装一个单独的零件。 最终产品即成品汽车。

装配线代表聚合管道,各个工位代表聚合阶段,专用工具代表表达式操作符,而成品则代表聚合结果

下表列出了使用查找操作可以执行的不同任务,同时列出了使用聚合操作可以实现的任务作为对比。聚合框架提供了扩展功能,允许您转换和操作数据。

查找操作
聚合操作

选择要返回的特定文档
选择要返回的字段
对结果进行排序
限制结果
对结果进行计数

选择要返回的特定文档
选择要返回的字段
对结果进行排序
对结果进行限制
对结果进行计数
对结果进行分组
重命名字段
计算新字段
汇总数据
连接和合并数据集

执行聚合操作时要考虑以下限制

  • 返回的文档不得违反 BSON 文档大小限制(16 兆字节)。

  • 默认情况下,管道阶段的内存限制为 100 MB。如果需要,可以通过设置传递给 Aggregate() 方法的 AggregateOptions 对象的 AllowDiskUse 属性来超出此限制。

如果使用 Query API中未提供的 LINQ 或生成器表达式,则可能会收到 Unsupported filter ...Expression not supported ... 异常消息。表达式在以下情况下可能不可用:

  1. 您尝试使用的.NET/ C#功能没有对应的MongoDB表示形式。示例, .NET/ C#和MongoDB在排序规则方面有不同的语义。

  2. 驱动程序不支持从 LINQ 或构建者表达式到查询 API 的特定转换。发生这种情况的原因可能是所提供的查询没有 Query API转换,或者驱动程序中尚未实现某项功能。

如果您收到这些异常之一,请尝试执行以下步骤:

  1. 使用MongoDB C# 分析器分析表达式。

  2. 尽可能简化查询。

  3. BsonDocument对象或JSON字符串的形式提供查询。 所有定义类,例如 FilterDefinitionProjectionDefinitionPipelineDefinition,都支持从 BsonDocument 对象或JSON字符串进行隐式转换。示例,以下筛选器在查询或聚合中使用时是等效的:

    FilterDefinition<Entity> typedFilter = Builders<Entity>.Filter.Eq(e => e.A, 1);
    FilterDefinition<Entity> bsonFilter = new BsonDocument {{ "a", 1 }};
    FilterDefinition<Entity> jsonFilter = "{ a : 1 }";

您可以在同一查询中组合 BsonDocument 对象、 JSON字符串、POCO,如以下示例所示:

FilterDefinition<Entity> filter = Builders<Entity>.Filter
.And(Builders<Entity>.Filter
.Eq(e => e.A, 1), BsonDocument
.Parse("{ b : 2 }"));

注意

如果使用 BsonDocument对象或JSON字符串,字段名称必须与服务器存储的区分大小写的名称匹配。 示例,引用 _id字段时,必须使用字段名 _id 来引用。

由于 Query API无法识别手动类映射、 BSON序列化属性或序列化约定,因此您无法使用这些机制更改字段名称。示例,如果文档包含名为 FirstName 并带有 [BsonElement("first_name")] 注释的字段,则必须在 BsonDocument 或JSON字符串定义中将其引用为 first_name

有关聚合阶段的完整列表,请参阅 聚合阶段,详见 MongoDB Server 手册。

要了解如何解释 MongoDB 聚合操作,请参阅解释结果查询计划。