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

mongodb://localhost/mydb

je voudrais être en mesure de db.GetCollection("mycollection")mydb.

cela permettrait de configurer facilement le nom de la base de données dans l'application.fichier de configuration.

41
demandé sur Pete Montgomery 2011-08-26 12:18:52

4 réponses

mise à Jour:

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

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

C'est facile. Vous devez d'abord prendre le nom de la base de données à partir de la chaîne de connexion et ensuite obtenir la base de données par le 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 la base de données auth sont différentes, vous pouvez ajouter un paramètre authSource= query pour spécifier une base de données auth différente. (merci à @chrisdrobison)

à Partir de docs:

notez si vous utilisez le segment de base de données comme base de données initiale pour utiliser, mais le nom d'utilisateur et le mot de passe spécifiés sont définis dans autre base de données, vous pouvez utiliser l'option authSource pour spécifier base de données dans laquelle le justificatif d'identité est défini. Exemple, mongodb://user:pass@hostname/db1?authSource=userbd s'authentifierait le justificatif d'identité par rapport à la base de données userDb à la place de db1.

46
répondu Andrew Orsich 2017-05-23 12:25:43

avec la version 1.7 du pilote officiel 10gen, c'est 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");
8
répondu aknuds1 2013-01-23 12:40:48

en ce moment avec la dernière version du pilote C# (2.3.0) la seule façon que j'ai trouvée pour obtenir le nom de la base de données spécifié dans la chaîne de connexion est ceci:

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");
5
répondu Paolo Laurenti 2016-10-19 15:34:02

la réponse ci-dessous est apparemment obsolète maintenant, mais fonctionne avec des pilotes plus âgés. Voir les commentaires.

si vous avez la chaîne de connexion, vous pouvez aussi utiliser MongoDatabase directement:

var db =  MongoDatabase.Create(connectionString);
var coll = db.GetCollection("MyCollection");
4
répondu Christian Horsdal 2013-01-04 14:26:20