コード例 #1
0
            public override BsonDocument Render(
                IBsonSerializer documentSerializer,
                IBsonSerializerRegistry serializerRegistry)
            {
                if (documentSerializer is IBsonSerializer <TDocument> typedSerializer)
                {
                    return(_sort.Render(typedSerializer, serializerRegistry));
                }

                return(_sort.Render(
                           serializerRegistry.GetSerializer <TDocument>(),
                           serializerRegistry));
            }
コード例 #2
0
        private void Assert <TDocument>(SortDefinition <TDocument> sort, string expectedJson)
        {
            var documentSerializer = BsonSerializer.SerializerRegistry.GetSerializer <TDocument>();
            var renderedSort       = sort.Render(documentSerializer, BsonSerializer.SerializerRegistry);

            renderedSort.Should().Be(expectedJson);
        }
コード例 #3
0
        private static BsonDocument RenderToBsonDocument <T>(this SortDefinition <T> filter)
        {
            var registry   = BsonSerializer.SerializerRegistry;
            var serializer = registry.GetSerializer <T>();

            return(filter.Render(serializer, registry));
        }
コード例 #4
0
        public static BsonDocument RenderToBsonDocument <T>(this SortDefinition <T> sortDefinition)
        {
            if (sortDefinition == null)
            {
                return(new BsonDocument());
            }
            var serializerRegistry = BsonSerializer.SerializerRegistry;
            var documentSerializer = serializerRegistry.GetSerializer <T>();

            return(sortDefinition.Render(documentSerializer, serializerRegistry));
        }
コード例 #5
0
        public IFindFluent <TDocument, TDocument> Sort(SortDefinition <TDocument> sort)
        {
            if (this.SortValues == null)
            {
                this.SortValues = new Dictionary <string, SortMode>();
            }

            var serializerRegistry = BsonSerializer.SerializerRegistry;
            var documentSerializer = serializerRegistry.GetSerializer <TDocument>();
            var sortRendered       = sort.Render(documentSerializer, serializerRegistry);

            foreach (var item in sortRendered)
            {
                this.SortValues.Add(item.Name, (item.Value > 0) ? SortMode.Asc : SortMode.Desc);
            }

            return(this);
        }
コード例 #6
0
        protected async Task <MGPagination <TEntity> > GetPaginationAsync(IMongoCollection <TEntity> collection,
                                                                          int page, int pageSize,
                                                                          FilterDefinition <TEntity> filter = null,
                                                                          SortDefinition <TEntity> sort     = null,
                                                                          Expression <Func <TEntity, TEntity> > projection = null)
        {
            var pipeline = new List <BsonDocument>();

            //{{ "$match" : { "PersonId" : "5acedf96c86324070424f263", "isCurrentlyWorkHere" : true } }}
            if (filter != null)
            {
                pipeline.Add(new BsonDocument {
                    { "$match", filter.Render(_documentSerializer, _serializerRegistry) }
                });
            }
            if (sort != null)
            {
                pipeline.Add(new BsonDocument {
                    { "$sort", sort.Render(_documentSerializer, _serializerRegistry) }
                });
            }
            if (projection != null)
            {
                var projectionBuilder = Builders <TEntity> .Projection.Expression(projection);

                pipeline.Add(new BsonDocument {
                    { "$project", projectionBuilder.Render(_documentSerializer, _serializerRegistry).Document }
                });
            }

            pipeline.Add(new BsonDocument
            {
                {
                    "$group", new BsonDocument
                    {
                        { "_id", 0 },
                        { "total", new BsonDocument {
                              { "$sum", 1 }
                          } },
                        { "datas", new BsonDocument {
                              { "$push", "$$ROOT" }
                          } }
                    }
                }
            });

            pipeline.Add(new BsonDocument
            {
                {
                    "$project", new BsonDocument
                    {
                        { "_id", 0 },
                        { "total", 1 },
                        { "datas", new BsonDocument {
                              { "$slice", new BsonArray(new object[] { "$datas", page * pageSize, pageSize }) }
                          } }
                    }
                }
            });

            var aggregate = collection.Aggregate <BsonDocument>(pipeline);

            var data = await aggregate.FirstOrDefaultAsync();

            var result = data == null
                ? new MGPagination <TEntity>()
            {
                datas = new TEntity[0], total = 0
            }
                : BsonSerializer.Deserialize <MGPagination <TEntity> >(data);

            return(result);
        }
コード例 #7
0
 private void PrintQuerySort(SortDefinition <User> sortDefinition)
 {
     _helper.WriteLine("Sort query");
     _helper.WriteLine(sortDefinition.Render(BsonSerializer.SerializerRegistry.GetSerializer <User>(),
                                             BsonSerializer.SerializerRegistry).ToString());
 }
コード例 #8
0
 public static BsonDocument DefaultRender(
     this SortDefinition <BsonDocument> bsonQuery)
 {
     return(bsonQuery.Render(DocumentSerializer, SerializerRegistry));
 }
コード例 #9
0
        /// <summary>
        /// Renders the sort to a MongoDB.Bson.BsonDocument.
        /// </summary>
        /// <param name="sort"></param>
        /// <returns></returns>
        public BsonDocument Render(SortDefinition <TEntity> sort)
        {
            var collection = GetCollection();

            return(sort.Render(collection.DocumentSerializer, collection.Settings.SerializerRegistry));
        }