Um
BsonDocument
pode ser convertido em um IPipelineStageDefinition. Para obter o BsonDocument que você deseja, basta:var addFieldsDefinitionDoc = BsonDocument.Parse(addFieldsDefinition.ToString());
var stageElement = new BsonElement("$addFields", addFieldsDefinitionDoc);
var stage = new BsonDocument(stageElement)
Então, para adicioná-lo, basta usar:
aggregate = aggregate.AppendStage(stage);
Não tenho certeza se
aggregate.Stages.Add
faria o mesmo ou não, mas eu acho AppendStage é provavelmente a melhor maneira de fazer isso (embora eu não tenha encontrado nenhuma documentação me dizendo qual é a maneira certa de fazer a maioria das coisas, então isso foi encontrado por tentativa e erro e inspecionando a fonte para ver como as coisas funcionam) ... Você pode até adicionar estágios adicionais usando as funções normais do construtor de estágios, assim:
aggregate = aggregate.Project(projectionDefinition);
ou mesmo
aggregate = aggregate
.AppendStage(stage)
.Project(projectionDefinition);