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); }
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); }
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); }