2017-02-17 22 views
2

Есть много SO, но есть одна простая вещь, которую я не понимаю, следовательно, создание этого SO.MongoDB указать базу данных в строке подключения

Выполните следующую строку подключения mongodb//admin:[email protected]/my_database. С этой строкой подключения я бы ожидал, что мне удалось подключиться к экземпляру MongoDB и конкретной базе данных my_database.

После нескольких СО и других частиц это должно работать, но если я смотрю официальную документацию от MongoDB, то опция database - это база данных, к которой я хочу выполнить аутентификацию.

/database - это имя базы данных для входа в систему и, следовательно, имеет значение только в том случае, если используется синтаксис username: password @. Если не указано, база данных «admin» будет использоваться по умолчанию.

Я хочу, чтобы мой аутентификация пользователя к базе данных администратора (как это, где мой пользователь лежит), но я хочу, чтобы получить доступ к базе данных my_database. Я бы ожидать, эта процедура работы:

private static string _connectionString = ConfigurationManager.ConnectionStrings["MongoDB"].ToString(); 

public static IMongoDatabase GetDatabase() 
{ 
    var _url = MongoUrl.Create(_connectionString); 
    var _databaseName = _url.DatabaseName; 
    return new MongoClient(_connectionString).GetDatabase(_databaseName); 
} 

Но всякий раз, когда я делаю это, я получаю тайм-аут для любых вызовов, сделанных в MongoDB. Примером может служить следующее:

public List<SomeObject> GetAllObjects() 
{ 
    var database = DatabaseInstance.GetDatabase(); 

    // Error is thrown here (timout after 30000ms) 
    var objects = database.Getcollection<SomeObject>("SomeObjects").Find(Builders<SomeObject>.Filter.Empty).Find(); 
    return objects; 
} 

Теперь, если бы я, чтобы удалить базу данных из строки подключения и жестко закодировать имя базы данных в моем return new MongoClient(_connectionString).GetDatabase("my_database");, все работает, как ожидалось.

Здесь я не понимаю параметр /database в строке подключения. Я бы очень признателен, если бы кто-то мог пролить свет на это.

ответ

6

В строке подключения можно применить опцию authSource.

Возьмем такой пример: mongodb://admin:[email protected]/my_database?authSource=admin

Теперь вы должны быть в состоянии получить текущее имя базы данных из строки соединения, но аутентифицировать к базе данных admin, используя этот код:

private static string _connectionString = ConfigurationManager.ConnectionStrings["MongoDB"].ToString(); 

public static IMongoDatabase GetDatabase() 
{ 
    var _databaseName = MongoUrl.Create(_connectionString).DatabaseName; 
    return new MongoClient(_connectionString).GetDatabase(_databaseName); 
}