public override RenderedPipelineDefinition <TOutput> Render(IBsonSerializer <TInput> inputSerializer, IBsonSerializerRegistry serializerRegistry) { var rendered = _wrapped.Render(inputSerializer, serializerRegistry); // do some combining of $match documents if possible. This is optimized for the // OfType case where we've added a discriminator as a match at the beginning of the pipeline. if (rendered.Documents.Count > 1) { var firstStage = rendered.Documents[0].GetElement(0); var secondStage = rendered.Documents[1].GetElement(0); if (firstStage.Name == "$match" && secondStage.Name == "$match") { var combinedFilter = Builders <BsonDocument> .Filter.And( (BsonDocument)firstStage.Value, (BsonDocument)secondStage.Value); var combinedStage = new BsonDocument("$match", combinedFilter.Render(BsonDocumentSerializer.Instance, serializerRegistry)); rendered.Documents[0] = combinedStage; rendered.Documents.RemoveAt(1); } } return(rendered); }
// private static methods private static RenderedPipelineDefinition <TResult> RenderPipeline <TResult, TDocument>( PipelineDefinition <ChangeStreamDocument <TDocument>, TResult> pipeline, IBsonSerializer <TDocument> documentSerializer) { var changeStreamDocumentSerializer = new ChangeStreamDocumentSerializer <TDocument>(documentSerializer); var serializerRegistry = BsonSerializer.SerializerRegistry; return(pipeline.Render(changeStreamDocumentSerializer, serializerRegistry)); }
/// <inheritdoc /> public override RenderedPipelineDefinition <TOutput> Render(IBsonSerializer <TInput> inputSerializer, IBsonSerializerRegistry serializerRegistry) { var renderedFirst = _first.Render(inputSerializer, serializerRegistry); var renderedSecond = _second.Render(renderedFirst.OutputSerializer, serializerRegistry); return(new RenderedPipelineDefinition <TOutput>( renderedFirst.Documents.Concat(renderedSecond.Documents), renderedSecond.OutputSerializer)); }
private CreateViewOperation CreateCreateViewOperation <TDocument, TResult>(string viewName, string viewOn, PipelineDefinition <TDocument, TResult> pipeline, CreateViewOptions <TDocument> options) { var serializerRegistry = options.SerializerRegistry ?? BsonSerializer.SerializerRegistry; var documentSerializer = options.DocumentSerializer ?? serializerRegistry.GetSerializer <TDocument>(); var pipelineDocuments = pipeline.Render(documentSerializer, serializerRegistry, _linqProvider).Documents; return(new CreateViewOperation(_databaseNamespace, viewName, viewOn, pipelineDocuments, GetMessageEncoderSettings()) { Collation = options.Collation, WriteConcern = _settings.WriteConcern }); }
/// <summary> /// Renders the update to a <see cref="BsonValue"/> that represents <see cref="BsonArray"/>. /// </summary> /// <param name="documentSerializer">The document serializer.</param> /// <param name="serializerRegistry">The serializer registry.</param> /// <param name="linqProvider">The LINQ provider.</param> /// <returns>A <see cref="BsonValue"/>.</returns> public override BsonValue Render(IBsonSerializer <TDocument> documentSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider) { var renderedPipeline = _pipeline.Render(documentSerializer, serializerRegistry, linqProvider); return(new BsonArray(renderedPipeline.Documents)); }