2011-08-26 23 views
40

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

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

mongodb://localhost/mydb 

Me gustaría ser capaz de 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.

Respuesta

42

Actualización:

MongoServer.Create es obsoleto en la actualidad (gracias a @ aknuds1). En cambio, esta utilización siguiente 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 y base de datos de autenticación son diferentes, se puede añadir un parámetro de consulta = authSource para especificar una base de datos de autenticación diferente. (Gracias a @chrisdrobison)

From docs:

NOTA Si está utilizando el segmento de base de datos como la base de datos inicial a uso, pero el nombre de usuario y la contraseña especificados se definen en una base de datos diferente, puede utilizar la opción authSource para especificar la base de datos en la cual 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.

+0

Ah, vale, veo mi problema. No tengo acceso a la cadena de conexión, sino solo al objeto MongoServer ya creado. Y no parece saber acerca de la conexión de la base de datos especificada. Gracias. –

+0

MongoServer.Create es obsoleto. – aknuds1

+0

@ aknuds1: Gracias, la respuesta está actualizada. –

4

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

Si usted tiene la cadena de conexión también se puede utilizar MongoDatabase directamente:

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

Conforme pasó el tiempo, MongoDatabase.Create() se ha quedado obsoleto desde la versión del controlador 1.7 – runTarm

+0

@runTarm Pero pasa el tiempo y la especificación de los nombres de las bases de datos en las cadenas de conexión mongo C no se está quedando obsoleta. –

8

Con la versión 1.7 del controlador oficial 10gen, esta es la corriente (no obsoletos) 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"); 
+0

fwif: Esto también funciona en Xamarin Studio 5.8.1 usando el controlador mongo 1.10 –

2

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 esto:

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

Esto debe ser actualizado, aunque sé que este es un hilo viejo. Esta es la única forma de obtener esto en la Versión 2.3. Gracias por la respuesta, fue necesario buscar para llegar hasta aquí. – ejcortes

Cuestiones relacionadas