我想连接到连接字符串中指定的数据库,而不是在GetDatabase
中再次指定它。
例如,如果我有这样的连接字符串;
mongodb://localhost/mydb
我希望能够db.GetCollection("mycollection")
mydb
。
这将允许在app.config文件中轻松配置数据库名称。
答案 0 :(得分:49)
<强>更新强>
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);
重要:如果数据库和auth数据库不同,则可以添加authSource = query参数以指定其他auth数据库。 (感谢@chrisdrobison)
注意如果您使用数据库段作为初始数据库 使用,但指定的用户名和密码在a中定义 不同的数据库,可以使用authSource选项来指定 定义凭证的数据库。例如, mongodb:// user:pass @ hostname / db1?authSource = userDb将进行身份验证 针对userDb数据库的凭证而不是db1。
答案 1 :(得分:8)
使用官方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");
答案 2 :(得分:8)
在这一刻,使用最新版本的C#驱动程序(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");
答案 3 :(得分:4)
以下答案显然已经过时,但适用于较老的司机。见评论。
如果你有连接字符串,你也可以直接使用MongoDatabase:
var db = MongoDatabase.Create(connectionString);
var coll = db.GetCollection("MyCollection");