mongo example create consultas conectar con collection c# mongodb mongodb-.net-driver

example - Cómo obtener la base de datos de Mongo especificada en la cadena de conexión en C#



mongodb driver c# sample (4)

Con la versión 1.7 del controlador 10gen oficial, esta es la API actual (no obsoleta):

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

Me gustaría conectarme a la base de datos especificada en la cadena de conexión, sin especificarla nuevamente en GetDatabase .

Por ejemplo, si tengo una cadena de conexión como esta;

mongodb://localhost/mydb

Me gustaría poder db.GetCollection("mycollection") de mydb .

Esto permitiría que el nombre de la base de datos se configure fácilmente en el archivo app.config.


En este momento con la última versión del controlador C # (2.3.0), la única forma que encontré para obtener el nombre de la base de datos especificado en la cadena de conexión es esta:

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


La respuesta a continuación es aparentemente obsoleta ahora, pero funciona con controladores anteriores. Ver comentarios.

Si tiene la cadena de conexión, también podría usar MongoDatabase directamente:

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


Actualizar:

MongoServer.Create está obsoleto ahora (gracias a @ aknuds1). En cambio este uso sigue el código:

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

Es fácil. Primero debe tomar el nombre de la base de datos de la cadena de conexión y luego obtener la base de datos por nombre. Ejemplo completo:

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

Importante : si su base de datos de base de datos y autenticación son diferentes, puede agregar un parámetro authSource = query para especificar una base de datos de autenticación diferente. (gracias a @chrisdrobison )

De documentos:

NOTA Si está utilizando el segmento de base de datos como base de datos inicial para usar, pero el nombre de usuario y la contraseña especificados están definidos en una base de datos diferente, puede usar la opción authSource para especificar la base de datos en la que se define la credencial. Por ejemplo, mongodb: // user: pass @ hostname / db1? AuthSource = userDb autenticaría la credencial contra la base de datos userDb en lugar de db1.