web-dev-qa-db-ja.com

C#の接続文字列で指定されたMongoデータベースを取得する方法

GetDatabaseで再度指定せずに、接続文字列で指定されたデータベースに接続したいと思います。

たとえば、次のような接続文字列がある場合、

_mongodb://localhost/mydb
_

mydbからdb.GetCollection("mycollection")できるようにしたいと思います。

これにより、app.configファイルでデータベース名を簡単に構成できます。

54
Pete Montgomery

更新:

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データベースに対して資格情報を認証します。

56
Andrew Orsich

この時点で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");
12
Paolo Laurenti

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

以下の回答は明らかに今では時代遅れですが、古いドライバーで動作します。コメントを参照してください。

接続文字列がある場合は、MongoDatabaseを直接使用することもできます。

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