Пример #1
0
        public PaginationDto <TreeDto> GetTrees(long page, long pageSize, string sort, Contracts.SortDirection sortDir)
        {
            var pipeline = GetPaginatedTreesAggregation(page, pageSize, sort, sortDir);
            var result   = _treesCollections.Aggregate <BsonDocument>(pipeline).ToList();

            var count = result[0]["total"][0]["count"].ToInt32();
            var trees = result[0]["results"].AsBsonArray
                        .Select(b => BsonSerializer.Deserialize <TreeEntity>(b.AsBsonDocument).ToDto())
                        .ToArray();

            return(new PaginationDto <TreeDto>(
                       page: page,
                       pageSize: pageSize,
                       sort: sort,
                       sortDir: sortDir.ToString().ToLower(),
                       count: count,
                       items: trees));
        }
Пример #2
0
        private BsonDocument[] GetPaginatedTreesAggregation(long page, long pageSize, string sort, Contracts.SortDirection sortDir)
        {
            var sortStep = new BsonDocument()
            {
                { "$sort", new BsonDocument {
                      { sort, sortDir == Contracts.SortDirection.Asc ? 1 : -1 }
                  } }
            };

            var resultsFacetStep = new BsonArray(new[]
            {
                new BsonDocument()
                {
                    { "$skip", page * pageSize }
                },
                new BsonDocument()
                {
                    { "$limit", pageSize }
                },
            });

            var totalFacetStep = new BsonArray(new[]
            {
                new BsonDocument()
                {
                    { "$count", "count" }
                },
            });

            var facetStep = new BsonDocument()
            {
                { "$facet", new BsonDocument()
                  {
                      { "results", resultsFacetStep },
                      { "total", totalFacetStep },
                  } }
            };

            var pipeline = new[] { sortStep, facetStep };

            return(pipeline);
        }