2017-02-17 14 views
2

そこには大量のデータがありますが、わかりません。MongoDB接続文字列でデータベースを指定してください

次の接続文字列mongodb//admin:[email protected]/my_databaseを使用してください。この接続文字列を使用すると、MongoDBインスタンスと特定のデータベースmy_databaseに接続できたと思います。

これにはいくつかの問題がありますが、これはうまくいくはずですが、MongoDBの公式ドキュメントを見ると、認証するデータベースはdatabaseです。

/databaseは、ログインするデータベースの名前であるため、username:password @構文が使用されている場合にのみ関連します。指定されていない場合、デフォルトで "admin"データベースが使用されます。

管理者データベース(私のユーザがいる場所)に認証されるようにしたいが、データベースmy_databaseにアクセスしたい。

private static string _connectionString = ConfigurationManager.ConnectionStrings["MongoDB"].ToString(); 

public static IMongoDatabase GetDatabase() 
{ 
    var _url = MongoUrl.Create(_connectionString); 
    var _databaseName = _url.DatabaseName; 
    return new MongoClient(_connectionString).GetDatabase(_databaseName); 
} 

しかし、私はこれを行うたびに、私はMongoDBのに行われた呼び出しのタイムアウトを受けています:私は、この手順が機能することを期待したいです。例はこれです:私は私のreturn new MongoClient(_connectionString).GetDatabase("my_database");に接続文字列とハードコードからデータベース名をデータベースを削除した場合に予想されるように

public List<SomeObject> GetAllObjects() 
{ 
    var database = DatabaseInstance.GetDatabase(); 

    // Error is thrown here (timout after 30000ms) 
    var objects = database.Getcollection<SomeObject>("SomeObjects").Find(Builders<SomeObject>.Filter.Empty).Find(); 
    return objects; 
} 

今、すべてが動作します。

接続文字列の/データベースオプションがわかりません。誰かがこのことを明らかにすることができれば、本当に感謝しています。

答えて

6

接続文字列では、オプションauthSourceを適用することができます。

は、この例を見てみましょう:mongodb://admin:[email protected]/my_database?authSource=admin

今、あなたは、接続文字列から現在のデータベース名を取得することができますが、このコードを使用して、adminデータベースに向けて認証する必要があります

private static string _connectionString = ConfigurationManager.ConnectionStrings["MongoDB"].ToString(); 

public static IMongoDatabase GetDatabase() 
{ 
    var _databaseName = MongoUrl.Create(_connectionString).DatabaseName; 
    return new MongoClient(_connectionString).GetDatabase(_databaseName); 
} 
関連する問題