【发布时间】: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