public void AddClient(string key, MongoCredential credential, MongoServerAddress address)
        {
            if (address == null)
            {
                throw new ArgumentNullException(nameof(address));
            }
            MongoClientSettings settings = new MongoClientSettings()
            {
                Server = address
            };

            if (credential != null)
            {
                settings.Credential = credential;
            }
            var client = new MongoClient(settings);

            if (!MongoClients.Keys.Contains(key))
            {
                MongoClients.Add(key, client);
            }
            else
            {
                MongoClients[key] = client;
            }
        }
        public int GetCount(DataBaseContext context, BsonDocument filter, CountOptions options = null)
        {
            if (!MongoClients.ContainsKey(context.ClientKey))
            {
                throw new NullReferenceException("请先连接MongoDB!");
            }

            var collection = MongoClients[context.ClientKey].GetDatabase(context.DbName).GetCollection <BsonDocument>(context.CollectionName);
            var count      = collection.CountDocuments(filter, options);

            return((int)count);
        }
        /// <summary>
        /// 查询
        /// </summary>
        /// <param name="context"></param>
        /// <param name="filter"></param>
        /// <returns></returns>
        public IEnumerable <BsonDocument> Query(DataBaseContext context, BsonDocument filter, FindOptions <BsonDocument> options = null)
        {
            if (!MongoClients.ContainsKey(context.ClientKey))
            {
                throw new NullReferenceException("请先连接MongoDB!");
            }

            var collection = MongoClients[context.ClientKey].GetDatabase(context.DbName).GetCollection <BsonDocument>(context.CollectionName);

            var cursor = collection.FindAsync <BsonDocument>(filter, options);
            var result = cursor.Result.ToList();

            return(result);
        }
Exemple #4
0
        private MongoClient GetClient(string connectionString)
        {
            MongoClient client = null;

            _clientLocker.EnterReadLock();
            try
            {
                if (MongoClients.ContainsKey(connectionString))
                {
                    client = MongoClients[connectionString];
                }
                else
                {
                    _clientLocker.ExitReadLock();
                    _clientLocker.EnterWriteLock();
                    try
                    {
                        if (!MongoClients.ContainsKey(connectionString))
                        {
                            client = new MongoClient(connectionString);
                            MongoClients.Add(connectionString, client);
                        }
                        client = MongoClients[connectionString];
                    }
                    finally
                    {
                        _clientLocker.ExitWriteLock();
                    }
                }
            }
            finally
            {
                if (_clientLocker.IsReadLockHeld)
                {
                    _clientLocker.ExitReadLock();
                }
            }
            return(client);
        }
Exemple #5
0
        private IMongoDatabase GetDatabase(IDatabaseSettings dbSettings)
        {
            IMongoDatabase database = null;

            _databaseLocker.EnterReadLock();
            try
            {
                if (Databases.ContainsKey(dbSettings.DatabaseName))
                {
                    database = Databases[dbSettings.DatabaseName];
                }
                else
                {
                    _databaseLocker.ExitReadLock();
                    _databaseLocker.EnterWriteLock();
                    try
                    {
                        if (!MongoClients.ContainsKey(dbSettings.ConnectionString))
                        {
                            database = GetClient(dbSettings.ConnectionString).GetDatabase(dbSettings.DatabaseName);
                            Databases.Add(dbSettings.ConnectionString, database);
                        }
                        database = Databases[dbSettings.ConnectionString];
                    }
                    finally
                    {
                        _databaseLocker.ExitWriteLock();
                    }
                }
            }
            finally
            {
                if (_databaseLocker.IsReadLockHeld)
                {
                    _databaseLocker.ExitReadLock();
                }
            }
            return(database);
        }
 public void Remove(string dbkey)
 {
     MongoClients.Remove(dbkey);
 }