web-dev-qa-db-fra.com

Comment obtenir la base de données Mongo spécifiée dans la chaîne de connexion en C #

Je voudrais me connecter à la base de données spécifiée dans la chaîne de connexion, sans la spécifier à nouveau dans GetDatabase.

Par exemple, si j'ai une chaîne de connexion comme celle-ci;

mongodb://localhost/mydb

Je voudrais pouvoir db.GetCollection("mycollection") à partir de mydb.

Cela permettrait au nom de la base de données d'être configuré facilement dans le fichier app.config.

54
Pete Montgomery

Mise à jour:

MongoServer.Create est désormais obsolète (grâce à @ aknuds1). Au lieu de cela, utilisez le code suivant:

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

C'est facile. Vous devez d'abord extraire le nom de la base de données de la chaîne de connexion, puis obtenir la base de données par son nom. Exemple complet:

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

Important : si votre base de données et votre base de données d'authentification sont différentes, vous pouvez ajouter un paramètre de requête authSource = pour spécifier une autre base de données d'authentification. (merci à @ chrisdrobison )

De la documentation:

REMARQUE Si vous utilisez le segment de base de données comme base de données initiale à utiliser, mais que le nom d'utilisateur et le mot de passe spécifiés sont définis dans une autre base de données, vous pouvez utiliser l'option authSource pour spécifier la base de données dans laquelle les informations d'identification sont définies. Par exemple, mongodb: // user: pass @ hostname/db1? AuthSource = userDb authentifierait les informations d'identification par rapport à la base de données userDb au lieu de db1.

56
Andrew Orsich

En ce moment avec la dernière version du pilote C # (2.3.0), le seul moyen que j'ai trouvé pour obtenir le nom de la base de données spécifié dans la chaîne de connexion est le suivant:

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");
12
Paolo Laurenti

Avec la version 1.7 du pilote 10gen officiel, il s'agit de l'API actuelle (non obsolète):

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

La réponse ci-dessous est apparemment obsolète maintenant, mais fonctionne avec des pilotes plus anciens. Voir les commentaires.

Si vous avez la chaîne de connexion, vous pouvez également utiliser directement MongoDatabase:

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