Overview
在此页面上,您可以学习;了解如何使用.NET/ C#驱动程序中的方法创建聚合管道和管道阶段。
构建聚合管道
您可以使用.NET/ C#驱动程序通过构建器方法或BSON文档构建聚合管道。请参阅以下部分,学习;了解有关每种方法的更多信息。
构建器方法
您可以通过以下方式构建类型安全的聚合管道:
构造一个
EmptyPipelineDefinition<TDocument>
对象。从此对象到相关聚合方法的链式调用。然后,将管道对象传递给IMongoCollection<TDocument>.Aggregate()
方法。调用
IMongoCollection<TDocument>.Aggregate()
方法。从此方法调用到相关聚合方法的链式调用。
选择 EmptyPipelineDefinition 或 Aggregate标签页,查看每种方法对应的代码:
// Defines the aggregation pipeline var pipeline = new EmptyPipelineDefinition<Movie>() .Match(...) .Group(...) .Merge(...); // Executes the aggregation pipeline var results = collection.Aggregate(pipeline);
// Defines and executes the aggregation pipeline var results = collection.Aggregate() .Match(...) .Group(...) .Merge(...);
BsonDocument
某些聚合阶段在.NET/ C#驱动程序中没有相应的方法。要将这些阶段添加到管道中,请使用 BsonDocument
对象或字符串字面量在 Query API语法中构造一个阶段。 然后,将BSON文档传递给 PipelineDefinitionBuilder.AppendStage()
方法。此语法支持聚合管道中的所有阶段,但不提供类型提示或类型安全。
以下代码示例演示如何将 $unset
阶段添加到空聚合管道:
var pipeline = new EmptyPipelineDefinition<BsonDocument>() .AppendStage<BsonDocument, BsonDocument, BsonDocument>("{ $unset: 'field1' }");
重要
如果使用 BsonDocument
定义管道阶段,驾驶员无法识别任何 BsonClassMap
属性、序列化属性或序列化约定。您在 BsonDocument
中使用的字段名称必须与存储在MongoDB Server中的字段名称匹配。
聚合阶段方法
下表列出了.NET/ C#驱动程序中与聚合管道中的阶段相对应的构建器方法。要学习;了解有关聚合阶段的更多信息并查看等效C#方法的代码示例,请点击MongoDB Server手册中从阶段名称到其参考页面的链接。
如果表中没有聚合阶段,则驾驶员不会为其提供构建器方法。在这种情况下,您必须使用 BsonDocument 语法将该阶段添加到管道。
聚合阶段 | 说明 | 构建器方法 |
---|---|---|
根据指定的表达式和存储桶边界将传入的文档分为多个组(称为存储桶)。 |
| |
根据指定的表达式,将接收到的文档归类到特定数量的群组中(称为“存储桶”)。自动确定存储桶边界,以尝试将文档均匀地分配到指定数量的存储桶中。 |
| |
返回集合的变更流游标。此阶段在聚合管道中只能发生一次,并且必须作为第一阶段发生。 |
| |
将超过 16 MB 的大型变更流事件拆分为较小的片段,在变更流游标中返回。 您只能在 |
| |
返回聚合管道此阶段的文档数量计数。 |
| |
在文档序列中创建新文档,其中缺少字段中的某些值。 |
| |
从输入表达式返回字面文档。 |
| |
在单个阶段内处理同一组输入文档上的多个聚合管道。支持创建多分面聚合,能够在单个阶段中跨多个维度或分面描述数据特征。 |
| |
对集合执行递归搜索。此方法向每个输出文档添加一个新的大量字段,其中包含该文档的递归搜索的遍历结果。 |
| |
按指定的标识符表达式对输入文档进行分组,并将累加器表达式(如果指定)应用于每个群组。使用所有输入文档并为每个不同的群组输出一个文档。输出文档仅包含标识符字段和累积字段(如果指定)。 |
| |
将未修改的前n个文档传递到管道,其中n是指定的限制。对于每个输入文档,输出一个文档(对于前n个文档)或零个文档(在前n个文档之后)。 |
| |
对同一 数据库中的另一个集合执行左外连接,以过滤“已连接”集合中的文档以便进行处理。 |
| |
过滤文档流以仅允许匹配的文档将未修改的文档传入下一管道阶段。对于每个输入文档,输出一个文档(一个匹配项)或零个文档(无匹配项)。 |
| |
将聚合管道的结果文档写入集合。该阶段可以将结果(插入新文档、合并文档、替换文档、保留现有文档、操作失败、使用自定义更新管道进程文档)合并到输出集合中。要使用此阶段,它必须是管道中的最后一个阶段。 |
| |
将聚合管道的结果文档写入集合。要使用此阶段,它必须是管道中的最后一个阶段。 |
| |
重塑流中的每个文档,例如添加新的字段或删除现有字段。对于每个输入文档,输出一个文档。 |
| |
用指定的嵌入文档替换文档。该操作会替换输入文档中的所有现有字段,包括
|
| |
用指定的嵌入文档替换文档。该操作会替换输入文档中的所有现有字段,包括
|
| |
从其输入中随机选择指定数量的文件。 |
| |
对 Atlas 集合中的一个或多个字段执行全文搜索。 此阶段仅适用于MongoDB Atlas集群,不适用于自托管部署。要学习;了解更多信息,请参阅Atlas文档中的Atlas Search聚合管道阶段。 |
| |
返回对 Atlas 集合进行 Atlas Search 查询时,得到的不同类型的元数据结果文档。 此阶段仅适用于MongoDB Atlas集群,不适用于自托管部署。要学习;了解更多信息,请参阅Atlas文档中的Atlas Search聚合管道阶段。 |
| |
向文档添加新字段。与 |
| |
将文档分组到窗口中,并将一个或多个操作符应用于每个窗口中的文档。 |
| |
跳过前 n 个文档(其中 n 是指定的跳过编号),并将未修改的其余文档传递到管道。对于每个输入文档,输出零个文档(对于前n个文档)或一个文档(如果在前n个文档之后)。 |
| |
按指定的排序键对文档流重新排序。文档保持不变。对于每个输入文档,输出一个文档。 |
| |
根据指定表达式的值对传入文档进行分组,然后计算每个不同群组中的文档数量。 |
| |
将两个集合的管道结果合并到一个结果设立。 |
| |
解构输入文档中的大量字段,为每个元素输出一个文档。每个输出文档都将大量替换为一个元素值。对于每个输入文档,输出n个文档,其中n是大量元素的数量。对于空大量,n 可以为零。 |
| |
对 Atlas 集合的指定字段中的一个向量执行 ANN 搜索。 此阶段仅适用于MongoDB Atlas集群,不适用于自托管部署。 |
|
API 文档
要学习;了解有关聚合管道的更多信息,请参阅MongoDB Server手册中的聚合管道。
要学习;了解有关创建管道阶段的更多信息,请参阅MongoDB Server手册中的聚合阶段。
有关此页面上使用的方法和类的更多信息,请参阅以下API文档: