public static List <T> FindDocumentByPage <T>(MongoCollectionName collectionName, FilterDefinition <BsonDocument> queryCondition, int pageIndex, int pageSize, string sortKey, MongoSortTypeEnum sortType)
        {
            var database   = mongoClient.GetDatabase(Configurations.mongoDBName);
            var collection = database.GetCollection <BsonDocument>(GetCollectionNameFromCollectionEnum(collectionName));

            FilterDefinition <BsonDocument> filter = queryCondition;

            SortDefinition <BsonDocument> sort = null;

            if (sortType == MongoSortTypeEnum.Asc)
            {
                sort = Builders <BsonDocument> .Sort.Ascending(sortKey);
            }
            else if (sortType == MongoSortTypeEnum.Desc)
            {
                sort = Builders <BsonDocument> .Sort.Descending(sortKey);
            }

            int startIndex = pageIndex * pageSize;

            var bsonList = collection.Find(filter).Sort(sort).Skip(startIndex).Limit(pageSize).Project(projection).ToList();

            List <T> result = new List <T>();

            foreach (var bson in bsonList)
            {
                string json = DeserializeBsonDocumentToJson(collection, bson);
                T      item = JsonConvert.DeserializeObject <T>(json);
                result.Add(item);
            }

            return(result);
        }
        public static List <T> FindDocumentByPage <T>(MongoCollectionName collectionName, Dictionary <string, string> queryCondition, int pageIndex, int pageSize, string sortKey, MongoSortTypeEnum sortType)
        {
            var database   = mongoClient.GetDatabase(Configurations.mongoDBName);
            var collection = database.GetCollection <BsonDocument>(GetCollectionNameFromCollectionEnum(collectionName));

            var bsonDoc = GenerateFilterDocumentFromDict(collection, queryCondition);
            FilterDefinition <BsonDocument> filter = bsonDoc;

            return(FindDocumentByPage <T>(collectionName, filter, pageIndex, pageSize, sortKey, sortType));
        }