2017-02-17 92 views
2

有很多SO的存在,但有一個我不明白的簡單的東西,因此創建了這個SO。MongoDB在連接字符串中指定數據庫

看看下面的連接字符串mongodb//admin:[email protected]/my_database。有了這個連接字符串,我期望我能夠連接到MongoDB實例,並且具體數據庫爲my_database

以下幾個SO和其他的,這應該有效,但如果我看MongoDB的官方文檔,database選項是我想要認證的數據庫。

/database是要登錄的數據庫的名稱,因此只有在使用用戶名: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");,一切正常。

這是我不明白連接字符串中的/數據庫選項。如果有人能夠闡明這一點,我會非常感激。

回答

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); 
} 
相關問題