Подтвердить что ты не робот

Как получить базу данных Mongo, указанную в строке подключения в С#

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

Например, если у меня есть строка соединения, например:

mongodb://localhost/mydb

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

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

4b9b3361

Ответ 1

Update:

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

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

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

Ответ 2

В версии 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");

Ответ 3

Ниже приведен ответ, очевидно, устаревший, но работает со старыми драйверами. См. Комментарии.

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

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

Ответ 4

В этот момент с последней версией драйвера С# (2.3.0) единственный способ найти имя базы данных, указанное в строке соединения, следующее:

var connectionString = @"mongodb://usr:[email protected],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");