繼續(xù)查找發(fā)現(xiàn)了另一篇文章。只做重點(diǎn)翻譯:
當(dāng)你只需要一個(gè)用戶,它在連接字符串中指定這是可能的。
var connectionString ="mongodb://user1:password1@localhost/test"; var mongoClient = newMongoClient(connectionString); 注意: 如果你不指定一個(gè)數(shù)據(jù)庫(kù)連接字符串,默認(rèn)的數(shù)據(jù)庫(kù)是“admin”數(shù)據(jù)庫(kù).
看到這里心里狂喜,終于可以進(jìn)行配置文件的設(shè)置了,但是發(fā)現(xiàn)c#的驅(qū)動(dòng)并不支持這樣的編寫,于是又是一個(gè)失落。
鏈接數(shù)據(jù)庫(kù),官方提供了兩種線程安全的方式,一個(gè)是MongoClient, 另一個(gè)是MongoServer,都是線程安全的,自動(dòng)進(jìn)行鎖定的。
利用服務(wù)端類鏈接數(shù)據(jù)庫(kù)
// Create server settings to passconnection string, timeout, etc.
MongoServerSettingssettings =newMongoServerSettings();
settings.Server = new MongoServerAddress("localhost",27017);
// Create server object tocommunicate with our server
MongoServer server = new MongoServer(settings);
// Get our databaseinstance to reach collections and data
var database = server.GetDatabase("MessageDB");
客戶端類鏈接數(shù)據(jù)庫(kù)的實(shí)例
var client = new MongoClient("mongodb://localhost:27017"); var server = client.GetServer(); var database = server.GetDatabase("foo"); var collection = database.GetCollection("bar");
以上的兩種鏈接方式我都做個(gè)測(cè)試。并且都可以用。這是一般更傾向于客戶端的鏈接方式。
通過(guò)查找Api,發(fā)現(xiàn)客戶端的類的構(gòu)造方法還有其他的
public MongoClient(); public MongoClient(MongoClientSettingssettings); public MongoClient(MongoUrl url); public MongoClient(stringconnectionString);
我們通常用的是string字符串的鏈接,這次對(duì)MongoClientSettings進(jìn)行的深度的查找調(diào)用發(fā)MongoClientSettings 是可以進(jìn)行更多的參數(shù)設(shè)置的,和Option類似,于是找到了解決方案,通過(guò)配置文件對(duì)MongoClientSettings進(jìn)行參數(shù)設(shè)置。
默認(rèn)情況下,最大鏈接池是100,最小是0,數(shù)據(jù)庫(kù)鏈接是本地的。下面我們看測(cè)試
MongoClientSettings settingsclient = newMongoClientSettings();//實(shí)例化客戶端設(shè)置類
紅色劃線部分是默認(rèn)的參數(shù),當(dāng)我們不填寫任何參數(shù),驅(qū)動(dòng)程序是進(jìn)行默認(rèn)的參數(shù)設(shè)置的。
通過(guò)客戶端類的參數(shù)設(shè)置可以發(fā)現(xiàn)已經(jīng)有所不同了。
那代碼是如何編寫的呢
#region 讀取配置文件信息 //獲取鏈接池大小 int connectionPool =Convert.ToInt32(ConfigurationManager.AppSettings["connectionPool"]); int minpool =Convert.ToInt32(ConfigurationManager.AppSettings["minpool"]); string hostname =ConfigurationManager.AppSettings["hostname"]; Int32 port =Convert.ToInt32(ConfigurationManager.AppSettings["port"]); string database =ConfigurationManager.AppSettings["database"]; #endregion if (String.IsNullOrEmpty(ConnectionString)) { throw newArgumentNullException("Connection string not found."); } #region 客戶端類設(shè)置 MongoServerAddress ipaddress = newMongoServerAddress(hostname, port);//設(shè)置服務(wù)器的ip和端口 MongoClientSettings settingsclient= new MongoClientSettings();//實(shí)例化客戶端設(shè)置類 settingsclient.Server =ipaddress;//端口賦值 settingsclient.MaxConnectionPoolSize = connectionPool; settingsclient.MinConnectionPoolSize = minpool; settingsclient.ConnectionMode =0;//鏈接模式設(shè)置 // MongoUrl url=newMongoUrl(ConnectionString); MongoClient client = newMongoClient(settingsclient);//調(diào)用客戶端類構(gòu)造函數(shù)設(shè)置參數(shù) MongoServer server =client.GetServer();//服務(wù)端獲取客戶端參數(shù) DB =server.GetDatabase(database);//獲取數(shù)據(jù)庫(kù)名稱 #endregion
剛開(kāi)始我也是不知道如何進(jìn)行參數(shù)賦值,只是在一步步的操作中發(fā)現(xiàn)參數(shù)是有類型的,一些類型是一些引用類,就需要實(shí)例化賦值。所以才有最后看起來(lái)很多的參數(shù)。
配置文件中的信息
當(dāng)然了客戶端的方式寫出來(lái)了。服務(wù)端也就容易的很多了
#region 服務(wù)端鏈接設(shè)置 MongoServerSettings mongoSetting =new MongoServerSettings(); //mongoSetting.Server = newMongoServerAddress(ConnectionString, connectionPool); mongoSetting.MaxConnectionPoolSize= connectionPool;//設(shè)定最大連接池 mongoSetting.Server = newMongoServerAddress(hostname, port); MongoServer server =MongoServer.Create(mongoSetting);//創(chuàng)建連接數(shù)據(jù)文件 DB = server.GetDatabase(database); #endregion
由于該數(shù)據(jù)庫(kù)的參考資料比較少,所以多數(shù)資料還是外文,剛開(kāi)始看到很是驚訝,如此多的英語(yǔ)能看的明白么。但是只要心境平靜,一切都是可以的。通過(guò)基本的查找和一些外文論壇了解的基本的設(shè)置。很像SQL的設(shè)置,但是又不同,需要進(jìn)行代碼設(shè)置,這是這個(gè)代碼的參數(shù)可以寫在配置文件中。這次的資料查找我深刻認(rèn)識(shí)到,英語(yǔ)是非常非常重要的工具,如果你想更深入的了解,英語(yǔ)是必不可少的利器。
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com