示例#1
0
            public override RenderedProjectionDefinition <TNewResult> Render(IBsonSerializer <TResult> documentSerializer, IBsonSerializerRegistry serializerRegistry)
            {
                var renderedOutput = AggregateGroupTranslator.Translate <TValue, TResult, TNewResult>(_valueExpression, _outputExpression, documentSerializer, serializerRegistry, _translationOptions);
                var document       = renderedOutput.Document;

                document.Remove("_id");
                return(new RenderedProjectionDefinition <TNewResult>(document, renderedOutput.ProjectionSerializer));
            }
 internal override RenderedProjectionDefinition <TOutput> TranslateExpressionToGroupProjection <TInput, TKey, TOutput>(
     Expression <Func <TInput, TKey> > idExpression,
     Expression <Func <IGrouping <TKey, TInput>, TOutput> > groupExpression,
     IBsonSerializer <TInput> documentSerializer,
     IBsonSerializerRegistry serializerRegistry,
     ExpressionTranslationOptions translationOptions)
 {
     return(AggregateGroupTranslator.Translate <TKey, TInput, TOutput>(idExpression, groupExpression, documentSerializer, serializerRegistry, translationOptions));
 }
        internal override RenderedProjectionDefinition <TOutput> TranslateExpressionToBucketOutputProjection <TInput, TValue, TOutput>(
            Expression <Func <TInput, TValue> > valueExpression,
            Expression <Func <IGrouping <TValue, TInput>, TOutput> > outputExpression,
            IBsonSerializer <TInput> documentSerializer,
            IBsonSerializerRegistry serializerRegistry,
            ExpressionTranslationOptions translationOptions)
        {
            var renderedOutput = AggregateGroupTranslator.Translate <TValue, TInput, TOutput>(valueExpression, outputExpression, documentSerializer, serializerRegistry, translationOptions);
            var document       = renderedOutput.Document;

            document.Remove("_id");
            return(new RenderedProjectionDefinition <TOutput>(document, renderedOutput.ProjectionSerializer));
        }
示例#4
0
        private ProjectedResult <TResult> Group <TKey, TResult>(Expression <Func <Root, TKey> > idProjector, Expression <Func <IGrouping <TKey, Root>, TResult> > groupProjector, ExpressionTranslationOptions translationOptions)
        {
            var serializer     = BsonSerializer.SerializerRegistry.GetSerializer <Root>();
            var projectionInfo = AggregateGroupTranslator.Translate <TKey, Root, TResult>(idProjector, groupProjector, serializer, BsonSerializer.SerializerRegistry, translationOptions);

            var group = new BsonDocument("$group", projectionInfo.Document);
            var sort  = new BsonDocument("$sort", new BsonDocument("_id", 1));
            var list  = __collection.Aggregate <TResult>(new BsonDocumentStagePipelineDefinition <Root, TResult>(new[] { group, sort }, projectionInfo.ProjectionSerializer)).ToList();

            return(new ProjectedResult <TResult>
            {
                Projection = projectionInfo.Document,
                Value = (TResult)list[0]
            });
        }
 public override RenderedProjectionDefinition <TNewResult> Render(IBsonSerializer <TResult> documentSerializer, IBsonSerializerRegistry serializerRegistry)
 {
     return(AggregateGroupTranslator.Translate <TKey, TResult, TNewResult>(_idExpression, _groupExpression, documentSerializer, serializerRegistry, _translationOptions));
 }