GetDatabase
で再度指定せずに、接続文字列で指定されたデータベースに接続したいと思います。
たとえば、次のような接続文字列がある場合、
_mongodb://localhost/mydb
_
mydb
からdb.GetCollection("mycollection")
できるようにしたいと思います。
これにより、app.configファイルでデータベース名を簡単に構成できます。
更新:
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);
Important:データベースと認証データベースが異なる場合、authSource =クエリパラメーターを追加して、異なる認証データベースを指定できます。 (ありがとう @ chrisdrobison )
注意使用する初期データベースとしてデータベースセグメントを使用しているが、指定されたユーザー名とパスワードが別のデータベースで定義されている場合、authSourceオプションを使用して、資格情報が定義されているデータベースを指定できます。たとえば、mongodb:// user:pass @ hostname/db1?authSource = userDbは、db1ではなくuserDbデータベースに対して資格情報を認証します。
この時点でC#ドライバーの最新バージョン(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");
公式の10genドライバーのバージョン1.7では、これは現在の(廃止されていない)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");
以下の回答は明らかに今では時代遅れですが、古いドライバーで動作します。コメントを参照してください。
接続文字列がある場合は、MongoDatabaseを直接使用することもできます。
var db = MongoDatabase.Create(connectionString);
var coll = db.GetCollection("MyCollection");