Un BsonDocument
peut être converti en un IPipelineStageDefinition. Pour obtenir le BsonDocument que vous souhaitez, il vous suffit de :
var addFieldsDefinitionDoc = BsonDocument.Parse(addFieldsDefinition.ToString());
var stageElement = new BsonElement("$addFields", addFieldsDefinitionDoc);
var stage = new BsonDocument(stageElement)
Ensuite, pour l'ajouter, utilisez simplement :
aggregate = aggregate.AppendStage(stage);
Je ne sais pas si aggregate.Stages.Add
ferait la même chose ou pas mais je pense AppendStage est probablement la meilleure façon de le faire (bien que je n'ai trouvé aucune documentation me disant quelle est la bonne façon de faire la plupart des choses, cela a donc été trouvé par essais et erreurs et en inspectant la source pour voir comment les choses fonctionnent) ...
Vous pouvez même ajouter des étapes supplémentaires en utilisant les fonctions normales de création d'étapes comme suit :
aggregate = aggregate.Project(projectionDefinition);
ou même
aggregate = aggregate
.AppendStage(stage)
.Project(projectionDefinition);