Docs 菜单
Docs 主页
/ / /
C#/ .NET驱动程序

聚合操作

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

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

要详细学习;了解.NET/ C#驱动程序支持的聚合阶段,请参阅 聚合阶段。

提示

完成聚合教程

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

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

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

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

查找操作
聚合操作
Select certain documents to return
Select which fields to return
Sort the results
Limit the results
Count the results
Select certain documents to return
Select which fields to return
Sort the results
Limit the results
Count the results
Group the results
Rename fields
Compute new fields
Summarize data
Connect and merge data sets

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

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

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

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

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

  2. 驾驶员不支持从 LINQ 或生成器表达式到 Query 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")] 注释的字段,则必须在first_name BsonDocument或JSON字符串定义中将其引用为 。

要查看表达式操作符的完整列表,请参阅聚合操作符。

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

后退

教程:创建 RESTful API

在此页面上