2011-08-26 92 views

回答

42

更新:

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

From docs:

注:如果您使用的是數據庫段作爲初始數據庫 使用,但規定在 不同的數據庫中定義的用戶名和密碼,就可以使用authSource選項來指定在其中定義了憑證的數據庫 。例如, mongodb:// user:pass @ hostname/db1?authSource = userDb將根據userDb數據庫而不是db1驗證 憑據。

+0

啊,好的 - 我看到我的問題。我無權訪問連接字符串,但只能訪問已創建的MongoServer對象。它似乎並不知道連接字符串指定的數據庫。謝謝。 –

+0

MongoServer.Create已過時。 – aknuds1

+0

@ aknuds1:謝謝,答案已更新。 –

4

下面的答案顯然已經過時了,但適用於較老的驅動程序。看評論。

如果你有連接字符串,你也可以直接使用MongoDatabase:

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

隨着時間的推移,MongoDatabase.Create()已經過時,因爲驅動程序版本1.7 – runTarm

+0

@runTarm但時間的推移,並且C#mongo連接字符串中數據庫名稱的規範不會過時。 –

8

與官方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"); 
+0

fwif:這也適用於使用mongo驅動程序的Xamarin Studio 5.8.1 1.10 –

2

在最新版本的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"); 
+1

這應該是upvoted,儘管我知道這是一箇舊線程。這是在2.3版本中得到這個的唯一方法。感謝您的回答,它花了一些搜索來到這裏。 – ejcortes

相關問題