BsonDocument
można przekonwertować na IPipelineStageDefinition. Aby uzyskać żądany dokument BsonDocument:
var addFieldsDefinitionDoc = BsonDocument.Parse(addFieldsDefinition.ToString());
var stageElement = new BsonElement("$addFields", addFieldsDefinitionDoc);
var stage = new BsonDocument(stageElement)
Następnie, aby go dodać, po prostu użyj:
aggregate = aggregate.AppendStage(stage);
Nie jestem pewien, czy aggregate.Stages.Add
zrobiłbym to samo lub nie, ale myślę AppendStage jest prawdopodobnie lepszym sposobem na zrobienie tego (chociaż nie znalazłem żadnej dokumentacji mówiącej mi, jaki jest właściwy sposób robienia większości rzeczy, więc zostało to znalezione metodą prób i błędów oraz sprawdzenie źródła, aby zobaczyć, jak to działa)...
Możesz nawet dodać dodatkowe etapy, korzystając z normalnych funkcji kreatora etapów, takich jak:
aggregate = aggregate.Project(projectionDefinition);
a nawet
aggregate = aggregate
.AppendStage(stage)
.Project(projectionDefinition);