MongoDB 在连接字符串中指定数据库
MongoDB specify database in connection string
那里有很多 SO,但有一点我不明白,因此创建了这个 SO。
取下面的连接字符串mongodb//admin:1234@10.0.125.1/my_database
。使用此连接字符串,我希望能够连接到 MongoDB 实例和特定数据库 my_database
.
按照几个 SO 和其他文章,这应该可以工作,但是如果我查看 MongoDB 的官方文档,database
选项是我要验证的数据库。
/database is the name of the database to login to and thus is only relevant if the username:password@ syntax is used. If not specified the “admin” database will be used by default.
我希望我的用户通过管理数据库的身份验证(因为这是我的用户所在的位置),但我想访问数据库 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 选项的地方。如果有人能对此有所了解,我将不胜感激。
在连接字符串中可以应用选项 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);
}
那里有很多 SO,但有一点我不明白,因此创建了这个 SO。
取下面的连接字符串mongodb//admin:1234@10.0.125.1/my_database
。使用此连接字符串,我希望能够连接到 MongoDB 实例和特定数据库 my_database
.
按照几个 SO 和其他文章,这应该可以工作,但是如果我查看 MongoDB 的官方文档,database
选项是我要验证的数据库。
/database is the name of the database to login to and thus is only relevant if the username:password@ syntax is used. If not specified the “admin” database will be used by default.
我希望我的用户通过管理数据库的身份验证(因为这是我的用户所在的位置),但我想访问数据库 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 选项的地方。如果有人能对此有所了解,我将不胜感激。
在连接字符串中可以应用选项 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);
}