【问题标题】:MongoDB specify database in connection stringMongoDB 在连接字符串中指定数据库
【发布时间】:2017-02-17 07:39:34
【问题描述】:

那里有很多 SO,但有一件我不明白的简单事情,因此创建了这个 SO。

获取以下连接字符串mongodb//admin:1234@10.0.125.1/my_database。有了这个连接字符串,我希望我能够连接到 MongoDB 实例,以及特定的数据库my_database

遵循几个 SO 和其他文章,这应该可以,但如果我查看 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 选项的地方。如果有人能对此有所了解,我将不胜感激。

【问题讨论】:

    标签: c# mongodb connection-string


    【解决方案1】:

    在连接字符串中可以应用选项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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-11
      • 2022-09-23
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多