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

我想连接到连接string中指定的数据库,而不必在GetDatabase再次指定它。

例如,如果我有这样的连接string;

 mongodb://localhost/mydb 

我希望能够从mydb db.GetCollection("mycollection")

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

更新:

MongoServer.Create现在已经过时(感谢@ aknuds1)。 相反,这使用下面的代码:

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

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

 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); 

重要提示 :如果您的数据库和auth数据库不同,您可以添加一个authSource =查询参数来指定一个不同的auth数据库。 (感谢@chrisdrobison )

从文档:

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

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

 const string uri = "mongodb://localhost/mydb"; var client = new MongoClient(uri); var db = client.GetServer().GetDatabase(new MongoUrl(uri).DatabaseName); var collection = db.GetCollection("mycollection"); 

下面的答案显然已经过时了,但适用于较老的驱动程序。 看评论。

如果你有连接string,你也可以直接使用MongoDatabase:

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

在最后一个版本的C#驱动程序(2.3.0)的这一刻,我发现获取连接string中指定的数据库名称的唯一方法是:

 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");