C# 如何在C中获取连接字符串中指定的Mongo数据库#

C# 如何在C中获取连接字符串中指定的Mongo数据库#,c#,mongodb,mongodb-.net-driver,C#,Mongodb,Mongodb .net Driver,我想连接到连接字符串中指定的数据库,而无需在GetDatabase中再次指定它 例如,如果我有一个这样的连接字符串 mongodb://localhost/mydb 我希望能够从mydb中db.GetCollection(“mycollection”) 这将允许在app.config文件中轻松配置数据库名称。更新: MongoServer.Create现在已经过时(多亏了@aknuds1)。而是使用以下代码: var _server = new MongoClient(connectionSt

我想连接到连接字符串中指定的数据库,而无需在
GetDatabase
中再次指定它

例如,如果我有一个这样的连接字符串

mongodb://localhost/mydb
我希望能够从
mydb
db.GetCollection(“mycollection”)


这将允许在app.config文件中轻松配置数据库名称。

更新:

MongoServer.Create
现在已经过时(多亏了@aknuds1)。而是使用以下代码:

var _server = new MongoClient(connectionString).GetServer();

这很容易。您应该首先从连接字符串中获取数据库名称,然后按名称获取数据库。完整示例:

var connectionString = "mongodb://localhost:27020/mydb";

//take database name from connection string
var _databaseName = MongoUrl.Create(connectionString).DatabaseName;
var _server = MongoServer.Create(connectionString);

//and then get database by database name:
_server.GetDatabase(_databaseName);
重要信息:如果数据库和身份验证数据库不同,可以添加authSource=query参数以指定不同的身份验证数据库。(谢谢你)

注意,如果使用数据库段作为初始数据库,则 使用,但指定的用户名和密码是在 不同的数据库,可以使用authSource选项指定 在其中定义凭据的数据库。例如 mongodb://user:pass@hostname/db1?authSource=userDb将进行身份验证 针对userDb数据库而不是db1的凭据


下面的答案显然已经过时,但适用于高龄驾驶人。见评论

如果您有连接字符串,也可以直接使用MongoDatabase:

var db =  MongoDatabase.Create(connectionString);
var coll = db.GetCollection("MyCollection");

对于官方10gen驱动程序的1.7版,这是当前(非过时)的API:


在C#driver的最新版本(2.3.0)中,我发现获取连接字符串中指定的数据库名称的唯一方法是:

var connectionString = @"mongodb://usr:pwd@srv1.acme.net,srv2.acme.net,srv3.acme.net/dbName?replicaSet=rset";
var mongoUrl = new MongoUrl(connectionString);
var dbname = mongoUrl.DatabaseName;
var db = new MongoClient(mongoUrl).GetDatabase(dbname);
db.GetCollection<MyType>("myCollectionName");
var connectionString=@”mongodb://usr:pwd@srv1.acme.net、srv2.acme.net、srv3.acme.net/dbName?replicaSet=rset”;
var mongoUrl=新的mongoUrl(连接字符串);
var dbname=mongoUrl.DatabaseName;
var db=newmongoclient(mongour).GetDatabase(dbname);
db.GetCollection(“myCollectionName”);

啊,好吧-我明白我的问题了。我无权访问连接字符串,但只能访问已创建的MongoServer对象。而且它似乎不知道数据库中指定的连接字符串。Thank.MongoServer.Create已过时。删除了我的上一条评论,因为它不太正确。但需要注意的是,根据Mongo文档,它还告诉驱动程序要针对哪个数据库进行身份验证。如果您的数据库和auth数据库不同,您可以添加authSource=query参数来指定不同的auth数据库。@chrisdrobison谢谢!这很重要要知道(更新了我的答案)!这个问题在3.5年前得到了回答。事情变了:)随着时间的推移,MongoDatabase.Create()从驱动程序版本1开始就被淘汰了。7@runTarm但随着时间的推移,C#mongo连接字符串中的数据库名称规范并未过时。fwif:这在Xamarin Studio 5.8.1中也可以使用mongo驱动程序1.10,这应该得到提高,虽然我知道这是一条旧线。这是在2.3版中实现此功能的唯一方法。谢谢你的回答,我花了一些时间才找到这里。
var connectionString = @"mongodb://usr:pwd@srv1.acme.net,srv2.acme.net,srv3.acme.net/dbName?replicaSet=rset";
var mongoUrl = new MongoUrl(connectionString);
var dbname = mongoUrl.DatabaseName;
var db = new MongoClient(mongoUrl).GetDatabase(dbname);
db.GetCollection<MyType>("myCollectionName");