MongoDB在连接字符串中指定数据库

时间:2017-02-17 07:39:34

标签: c# mongodb connection-string

那里有大量的SO,但有一个我不理解的简单事物,因此创造了这个SO。

使用以下连接字符串mongodb//admin:1234@10.0.125.1/my_database。使用此连接字符串,我希望能够连接到MongoDB实例和特定数据库my_database

遵循几个SO和其他rarticle,这应该有效,但如果我查看MongoDB的官方文档,database选项是我想要验证的数据库。

  

/ database是要登录的数据库的名称,因此仅在使用username:password @ syntax时才相关。如果未指定,默认情况下将使用“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 选项的地方。如果有人能对此有所了解,我真的很感激。

1 个答案:

答案 0 :(得分:8)

在连接字符串中可以应用选项authSource

举个例子:mongodb://admin:1234@some.ip/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);
}