Как получить базу данных Mongo, указанную в строке подключения в C # - PullRequest
49 голосов
/ 26 августа 2011

Я хотел бы подключиться к базе данных, указанной в строке подключения, не указывая ее снова в GetDatabase.

Например, если у меня есть строка подключения, подобная этой;

mongodb://localhost/mydb

Я бы хотел иметь возможность db.GetCollection("mycollection") с mydb.

Это позволит легко настроить имя базы данных в файле app.config.

Ответы [ 4 ]

51 голосов
/ 26 августа 2011

Обновление:

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 =, чтобы указать другую базу данных auth. (спасибо @ chrisdrobison )

Из документов:

ПРИМЕЧАНИЕ. Если вы используете сегмент базы данных в качестве начальной использовать, но указанные имя пользователя и пароль определены в другой базы данных, вы можете использовать опцию authSource, чтобы указать база данных, в которой определены учетные данные. Например, mongodb: // user: pass @ hostname / db1? authSource = userDb выполнит аутентификацию учетные данные для базы данных userDb вместо db1.

11 голосов
/ 19 октября 2016

В данный момент в последней версии драйвера 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");
8 голосов
/ 23 января 2013

С версией 1.7 официального драйвера 10gen это текущий (не устаревший) 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");
4 голосов
/ 26 августа 2011

Ответ ниже, очевидно, устарел, но работает со старыми драйверами. Смотрите комментарии.

Если у вас есть строка подключения, вы также можете напрямую использовать MongoDatabase:

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