我想連接到連接字符串中指定的數據庫,但沒有在GetDatabase
中再次指定它。如何獲取C#中的連接字符串中指定的Mongo數據庫
例如,如果我有這樣的連接字符串;
mongodb://localhost/mydb
我希望能夠從db.GetCollection("mycollection")
mydb
。
這將允許在app.config文件中輕鬆配置數據庫名稱。
我想連接到連接字符串中指定的數據庫,但沒有在GetDatabase
中再次指定它。如何獲取C#中的連接字符串中指定的Mongo數據庫
例如,如果我有這樣的連接字符串;
mongodb://localhost/mydb
我希望能夠從db.GetCollection("mycollection")
mydb
。
這將允許在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);
重要:如果你的數據庫和權威性的數據庫是不同的,你可以添加一個authSource =查詢參數指定不同的身份驗證數據庫。 (謝謝@chrisdrobison)
注:如果您使用的是數據庫段作爲初始數據庫 使用,但規定在 不同的數據庫中定義的用戶名和密碼,就可以使用authSource選項來指定在其中定義了憑證的數據庫 。例如, mongodb:// user:pass @ hostname/db1?authSource = userDb將根據userDb數據庫而不是db1驗證 憑據。
下面的答案顯然已經過時了,但適用於較老的驅動程序。看評論。
如果你有連接字符串,你也可以直接使用MongoDatabase:
var db = MongoDatabase.Create(connectionString);
var coll = db.GetCollection("MyCollection");
隨着時間的推移,MongoDatabase.Create()已經過時,因爲驅動程序版本1.7 – runTarm
@runTarm但時間的推移,並且C#mongo連接字符串中數據庫名稱的規範不會過時。 –
與官方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");
fwif:這也適用於使用mongo驅動程序的Xamarin Studio 5.8.1 1.10 –
在最新版本的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");
這應該是upvoted,儘管我知道這是一箇舊線程。這是在2.3版本中得到這個的唯一方法。感謝您的回答,它花了一些搜索來到這裏。 – ejcortes
啊,好的 - 我看到我的問題。我無權訪問連接字符串,但只能訪問已創建的MongoServer對象。它似乎並不知道連接字符串指定的數據庫。謝謝。 –
MongoServer.Create已過時。 – aknuds1
@ aknuds1:謝謝,答案已更新。 –