gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:19:43 24 4
gpt4 key购买 nike

那里有很多 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.

我希望我的用户通过 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 选项的地方。如果有人能阐明这一点,我将不胜感激。

最佳答案

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

关于c# - MongoDB 在连接字符串中指定数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42292099/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com