public static Task <TResult> LoadDocumentAs <T, TResult>(
     this IMongoDatabase database,
     string id,
     Expression <Func <T, TResult> > projection,
     MongoCollectionName collectionName,
     CancellationToken cancellationToken = default
     ) where T : Document
 => database.GetDocumentCollection <T>(collectionName).LoadDocumentAs(id, projection, cancellationToken);
 public static Task <long> UpdateManyDocuments <T>(
     this IMongoDatabase database,
     MongoCollectionName collectionName,
     FilterDefinition <T> filter,
     UpdateDefinition <T> update,
     CancellationToken cancellationToken = default
     ) where T : Document
 => database.GetDocumentCollection <T>(collectionName).UpdateManyDocuments(filter, update, cancellationToken);
 public static Task UpdateDocument <T>(
     this IMongoDatabase database,
     string id,
     MongoCollectionName collectionName,
     UpdateDefinition <T> update,
     CancellationToken cancellationToken = default
     ) where T : Document
 => database.GetDocumentCollection <T>(collectionName).UpdateDocument(id, update, cancellationToken);
 public static Task <TResult> LoadDocumentAs <T, TResult>(
     this IMongoDatabase database,
     string id,
     Func <ProjectionDefinitionBuilder <T>, ProjectionDefinition <T> > projection,
     MongoCollectionName collectionName,
     CancellationToken cancellationToken = default
     ) where T : Document
 => database.GetDocumentCollection <T>(collectionName).LoadDocumentAs <T, TResult>(id, projection, cancellationToken);
        private MongoCollection GetCollection(object container)
        {
            // Prefer the collection provided in ctor over the one given during id generation
            MongoDatabase db             = this.mongoDb ?? ((MongoCollection)container).Database;
            string        collectionName = MongoCollectionName.Get <Identity>();

            return(db.GetCollection(collectionName));
        }
Exemple #6
0
        public Repository(IConnect connect)
        {
            this.Connect = connect;
            MongoCollectionName mongoCollectionName = (MongoCollectionName)Attribute.GetCustomAttribute(typeof(T), typeof(MongoCollectionName));

            this.CollectionName = (mongoCollectionName != null ? mongoCollectionName.TableName : typeof(T).Name.ToLower());
            mongoCollectionName = null;
            this.Collection     = this.Connect.Collection <T>(this.CollectionName);
        }
Exemple #7
0
 public static IMongoCollection <T> GetDocumentCollection <T>(
     this IMongoDatabase database,
     MongoCollectionName?collectionName,
     MongoCollectionSettings?settings
     ) where T : Document
 => database.GetCollection <T>(
     collectionName == null ? MongoCollectionName.For <T>() : collectionName,
     settings
     );
        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));
        }
        public static IMongoQueryable <T> AsQueryable <T>(
            this IMongoDatabase database,
            MongoCollectionName collectionName,
            Action <AggregateOptions> configure = null
            ) where T : Document
        {
            var options = new AggregateOptions();

            configure?.Invoke(options);

            return(database.GetDocumentCollection <T>(collectionName).AsQueryable(options));
        }
Exemple #10
0
        internal void SetCollectionName()
        {
            MongoCollectionName mongoCollectionName = (MongoCollectionName)typeof(TEntity)
                                                      .GetTypeInfo()
                                                      .GetCustomAttribute(typeof(MongoCollectionName));

            _collectionName = mongoCollectionName != null
                ? mongoCollectionName.TableName
                : typeof(TEntity).Name.ToLower();

            mongoCollectionName = null;
        }
        public static void InsertDocument(MongoCollectionName collectionName, object data)
        {
            try
            {
                var database   = mongoClient.GetDatabase(Configurations.mongoDBName);
                var collection = database.GetCollection <BsonDocument>(GetCollectionNameFromCollectionEnum(collectionName));

                var bsonDoc = GenerateBsonDocumentFromObject(data, collection);

                collection.InsertOne(bsonDoc);
            }
            catch (Exception e)
            {
                throw e;
            }
        }
        public static int Count(MongoCollectionName collectionName, Dictionary <string, string> queryCondition)
        {
            try
            {
                var database   = mongoClient.GetDatabase(Configurations.mongoDBName);
                var collection = database.GetCollection <BsonDocument>(GetCollectionNameFromCollectionEnum(collectionName));

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

                var bsonList = collection.Find(filter).Count();

                return(Convert.ToInt32(bsonList));
            }
            catch (Exception e)
            {
                throw e;
            }
        }
        public static T FindLastByKey <T>(MongoCollectionName collectionName, string sortKey)
        {
            var database   = mongoClient.GetDatabase(Configurations.mongoDBName);
            var collection = database.GetCollection <BsonDocument>(GetCollectionNameFromCollectionEnum(collectionName));

            var filter = Builders <BsonDocument> .Filter.Exists(sortKey);

            SortDefinition <BsonDocument> sort = Builders <BsonDocument> .Sort.Descending(sortKey);

            var bson = collection.Find(filter).Sort(sort).Project(projection).FirstOrDefault();

            if (bson == null)
            {
                return(default(T));
            }

            string json   = DeserializeBsonDocumentToJson(collection, bson);
            T      result = JsonConvert.DeserializeObject <T>(json);

            return(result);
        }
        public static void RemoveDocument(MongoCollectionName collectionName, Dictionary <string, string> removeCondition, bool allowEmptyRemove = false)
        {
            var database   = mongoClient.GetDatabase(Configurations.mongoDBName);
            var collection = database.GetCollection <BsonDocument>(GetCollectionNameFromCollectionEnum(collectionName));

            var bsonDoc = GenerateFilterDocumentFromDict(collection, removeCondition);

            FilterDefinition <BsonDocument> filter = bsonDoc;


            var result = collection.DeleteMany(filter);

            if (result.IsAcknowledged == true)
            {
                if (result.DeletedCount == 0 && !allowEmptyRemove)
                {
                    throw new ROException("数据删除失败");
                }
            }
            else
            {
                throw new Exception("unknown mongo exception");
            }
        }
        public static void UpdateDocument(MongoCollectionName collectionName, Dictionary <string, string> queryCondition, MongoUpdateModel updateCondition, bool allowEmptyUpdate = false)
        {
            var database   = mongoClient.GetDatabase(Configurations.mongoDBName);
            var collection = database.GetCollection <BsonDocument>(GetCollectionNameFromCollectionEnum(collectionName));

            var conditionDoc = GenerateFilterDocumentFromDict(collection, queryCondition);
            var filter       = conditionDoc;

            var update = GenerateUpdateDocument(updateCondition, collection);

            var result = collection.UpdateMany(filter, update);

            if (result.IsAcknowledged == true)
            {
                if (result.ModifiedCount == 0 && !allowEmptyUpdate)
                {
                    throw new ROException("数据更新失败");
                }
            }
            else
            {
                throw new Exception("数据更新失败");
            }
        }
        public static void ReplaceDocument(MongoCollectionName collectionName, Dictionary <string, string> queryCondition, object data)
        {
            var database   = mongoClient.GetDatabase(Configurations.mongoDBName);
            var collection = database.GetCollection <BsonDocument>(GetCollectionNameFromCollectionEnum(collectionName));

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

            var update = GenerateBsonDocumentFromObject(data, collection);

            var result = collection.ReplaceOne(filter, update);

            if (result.IsAcknowledged == true)
            {
                if (result.ModifiedCount == 0)
                {
                    throw new ROException("数据更新失败");
                }
            }
            else
            {
                throw new Exception("数据更新失败");
            }
        }
 public static IMongoCollection <T> GetDocumentCollection <T>(
     this IMongoDatabase database,
     MongoCollectionSettings settings
     ) where T : Document
 => GetDocumentCollection <T>(database, MongoCollectionName.For <T>(), settings);
 public static IMongoCollection <T> GetDocumentCollection <T>(this IMongoDatabase database, MongoCollectionName collectionName = null)
     where T : Document
 => GetDocumentCollection <T>(database, collectionName ?? MongoCollectionName.For <T>(), null);