這篇文章主要介紹了MongoDB在.Net中如何使用,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
你所需要的網(wǎng)站建設(shè)服務(wù),我們均能行業(yè)靠前的水平為你提供.標(biāo)準(zhǔn)是產(chǎn)品質(zhì)量的保證,主要從事網(wǎng)站建設(shè)、網(wǎng)站制作、企業(yè)網(wǎng)站建設(shè)、成都手機(jī)網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)、品牌網(wǎng)站建設(shè)、網(wǎng)頁制作、做網(wǎng)站、建網(wǎng)站。創(chuàng)新互聯(lián)公司擁有實(shí)力堅(jiān)強(qiáng)的技術(shù)研發(fā)團(tuán)隊(duì)及素養(yǎng)的視覺設(shè)計(jì)專才。什么是MongoDB
MongoDB是基于文檔的存儲(chǔ)的(而非表),是一個(gè)介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的。他支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似json的bson格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類型。Mongo大的特點(diǎn)是他支持的查詢語言非常強(qiáng)大,其語法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對(duì)數(shù)據(jù)建立索引。Mongo主要解決的是海量數(shù)據(jù)的訪問效率問題。因?yàn)镸ongo主要是支持海量數(shù)據(jù)存儲(chǔ)的,所以Mongo還自帶了一個(gè)出色的分布式文件系統(tǒng)GridFS,可以支持海量的數(shù)據(jù)存儲(chǔ)。由于Mongo可以支持復(fù)雜的數(shù)據(jù)結(jié)構(gòu),而且?guī)в袕?qiáng)大的數(shù)據(jù)查詢功能,因此非常受到歡迎。
BSON是MongoDB的數(shù)據(jù)存儲(chǔ)格式。大家對(duì)于JSON比較熟悉,但是什么是BSON呢BSON基于JSON格式,選擇JSON進(jìn)行改造的原因主要是JSON的通用性及JSON的schemaless的特性。
BSON具有如下特點(diǎn)
1.更快的遍歷速度
對(duì)JSON格式來說,太大的JSON結(jié)構(gòu)會(huì)導(dǎo)致數(shù)據(jù)遍歷非常慢。在JSON中,要跳過一個(gè)文檔進(jìn)行數(shù)據(jù)讀取,需要對(duì)此文檔進(jìn)行掃描才行,需要進(jìn)行麻煩數(shù)據(jù)結(jié)構(gòu)匹配,比如括號(hào)的匹配,而BSON對(duì)JSON的一大改進(jìn)就是,它會(huì)將JSON的每一個(gè)元素的長度存在元素的頭部,這樣你只需要讀取到元素長度就能直接seek到指定的點(diǎn)上進(jìn)行讀取了。
2.操作更簡易
對(duì)JSON來說,數(shù)據(jù)存儲(chǔ)是無類型的,比如你要修改基本一個(gè)值,從9到10,由于從一個(gè)字符變成了兩個(gè),所以可能其后面的所有內(nèi)容都需要往后移一位才可以。而使用BSON,你可以指定這個(gè)列為數(shù)字列,那么無論數(shù)字從9長到10還是100,我們都只是在存儲(chǔ)數(shù)字的那一位上進(jìn)行修改,不會(huì)導(dǎo)致數(shù)據(jù)總長變大。當(dāng)然,在MongoDB中,如果數(shù)字從整形增大到長整型,還是會(huì)導(dǎo)致數(shù)據(jù)總長變大的。
3.增加了額外的數(shù)據(jù)類型
JSON是一個(gè)很方便的數(shù)據(jù)交換格式,但是其類型比較有限。BSON在其基礎(chǔ)上增加了“byte array”數(shù)據(jù)類型。這使得二進(jìn)制的存儲(chǔ)不再需要先base64轉(zhuǎn)換后再存成JSON。大大減少了計(jì)算開銷和數(shù)據(jù)大小。當(dāng)然,在有的時(shí)候,BSON相對(duì)JSON來說也并沒有空間上的優(yōu)勢(shì),因?yàn)橛辛祟愋透拍睢?/p>
MongoDB windows下 安裝
MongoDB的安裝很簡單,設(shè)置好安裝路徑后,一直Next直到安裝結(jié)束,大的坑就是MongoDB服務(wù)的安裝,下面具體說下MongoDB安裝之后的一些配置操作
1.在根目錄下創(chuàng)建數(shù)據(jù)庫路徑(data目錄)、日志路徑(logs目錄)、日志文件(mongo.log文件)、配置路徑(conf目錄)我的安裝路徑是:D:\Program Files\mongodb
2.在conf目錄下創(chuàng)建配置文件mongo.conf,文件內(nèi)容如下:
logpath=D:\Program Files\mongodb\logs\mongodb.log #日志輸出文件路徑 logappend=true #錯(cuò)誤日志采用追加模式,配置這個(gè)選項(xiàng)后mongodb的日志會(huì)追加到現(xiàn)有的日志文件,而不是從新創(chuàng)建一個(gè)新文件 journal=true #啟用日志文件,默認(rèn)啟用 quiet=true #這個(gè)選項(xiàng)可以過濾掉一些無用的日志信息,若需要調(diào)試使用請(qǐng)?jiān)O(shè)置為false port=27017 #端口號(hào) 默認(rèn)為27017 auth=true #啟用驗(yàn)證 需要用戶名密碼
配置完成以上2個(gè)步驟 就可以 啟動(dòng)MongoDB了
運(yùn)行CMD 輸入命令 (注意 mongod的路徑)
mongod --config " D:\Program Files\mongodb\data \conf\mongo.conf"
3.創(chuàng)建并啟動(dòng)MongoDB服務(wù)
如果每次都按照步驟三那樣操作,豈不是相當(dāng)麻煩,按照如下命令來創(chuàng)建并啟動(dòng)MongoDB服務(wù),就可以通過windows服務(wù)來管理MongoDB的啟動(dòng)和關(guān)閉了
mongod --config " D:\Program Files\mongodb\data \conf\mongo.conf" --install --serviceName "MongoDB" net start MongoDB
測試是否成功 可以在 瀏覽器中輸入http://localhost:27017/如果出現(xiàn)下圖表示服務(wù)安裝成功
如果需要卸載MongoDB服務(wù) 在CMD 中運(yùn)行
mongod.exe --remove --serviceName "MongoDB"
前期準(zhǔn)備工作完成了,就可以開始擼代碼了
如何在.net 中使用MongoDB
首先在項(xiàng)目中引入 MongoDB.Bson.dll,MongoDB.Driver.dll,MongoDB.Driver.Core.dll 我使用的是2.0版本的 現(xiàn)在好多文章都是介紹使用1+版本的 這也是我寫此文的目的引入驅(qū)動(dòng)DLL后,就可以開始擼代碼了
部分代碼如下
private static MongoClient client; private static IMongoDatabase database; //本地配置 private const string MongoDBConnectionStr = "mongodb://localhost"; //數(shù)據(jù)庫名稱 private static string DefaultDataBaseName = "Test"; public MongoDBHelper() { GetConnection(DefaultDataBaseName); } ////// 構(gòu)造函數(shù) 指定數(shù)據(jù)庫 /// /// public MongoDBHelper(string dataBaseName) { GetConnection(dataBaseName); } private static void GetConnection(string dataBaseName) { client = new MongoClient(MongoDBConnectionStr); database = client.GetDatabase(dataBaseName); } ////// 異步插入一條數(shù)據(jù),手動(dòng)輸入collection name /// public Task InsertAsync(string collectionName, T obj) { if (database == null) { throw new Exception("沒有指定數(shù)據(jù)庫"); } var collection = database.GetCollection (collectionName); return collection.InsertOneAsync(obj); } /// /// 異步插入一條數(shù)據(jù),采用類型T的完全限定名作為collection name /// public Task InsertAsync(T obj) { return InsertAsync(typeof(T).FullName, obj); } /// /// 異步插入多條數(shù)據(jù),手動(dòng)輸入collection name /// public Task BatchInsertAsync(string collectionName, IEnumerable objs) { if (database == null) { throw new Exception("沒有指定數(shù)據(jù)庫"); } if (objs == null) { throw new ArgumentException(); } var collection = database.GetCollection (collectionName); return collection.InsertManyAsync(objs); } /// /// 異步插入多條數(shù)據(jù),采用類型T的完全限定名作為collection name /// public Task BatchInsertAsync(IEnumerable objs) { return BatchInsertAsync(typeof(T).FullName, objs); } /// /// 插入一條數(shù)據(jù) /// public void Insert(T obj) { InsertAsync(obj).Wait(); } /// /// 插入多條數(shù)據(jù) /// public void Insert(IEnumerable objs) { BatchInsertAsync(objs).Wait(); } /// /// MongoDB C# Driver的Find方法,返回IFindFluent。手動(dòng)輸入collection name /// public IFindFluentFind (string collectionName, FilterDefinition filter, FindOptions options = null) { if (database == null) { throw new Exception("沒有指定數(shù)據(jù)庫"); } var collection = database.GetCollection (collectionName); return collection.Find(filter, options); } /// /// MongoDB C# Driver的Find方法,返回IFindFluent。采用類型T的完全限定名作為collection name /// public IFindFluentFind (FilterDefinition filter, FindOptions options = null) { return Find(typeof(T).FullName, filter, options); } /// /// 取符合條件的數(shù)據(jù) sort中多個(gè)排序條件逗號(hào)分隔,默認(rèn)asc /// public ListGet (Expression > condition, int skip, int limit, string sort) { return Get(new List >> { condition }, skip, limit, sort); } public List Get (Expression > condition) { return Get(condition, 0, 0, null); } /// /// 取符合條件的數(shù)據(jù) sort中多個(gè)排序條件逗號(hào)分隔,默認(rèn)asc /// public ListGet (List >> conditions, int skip, int limit, string sort) { if (conditions == null || conditions.Count == 0) { conditions = new List >> { x => true }; } var builder = Builders .Filter; var filter = builder.And(conditions.Select(x => builder.Where(x))); var ret = new List (); try { List > sortDefList = new List >(); if (sort != null) { var sortList = sort.Split(','); for (var i = 0; i < sortList.Length; i++) { var sl = Regex.Replace(sortList[i].Trim(), @"\s+", " ").Split(' '); if (sl.Length == 1 || (sl.Length >= 2 && sl[1].ToLower() == "asc")) { sortDefList.Add(Builders .Sort.Ascending(sl[0])); } else if (sl.Length >= 2 && sl[1].ToLower() == "desc") { sortDefList.Add(Builders .Sort.Descending(sl[0])); } } } var sortDef = Builders .Sort.Combine(sortDefList); ret = Find(filter).Sort(sortDef).Skip(skip).Limit(limit).ToListAsync().Result; } catch (Exception e) { //異常處理 } return ret; } public List Get (List >> conditions) { return Get(conditions, 0, 0, null); }
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享MongoDB在.Net中如何使用內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司,關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道,遇到問題就找創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司,詳細(xì)的解決方法等著你來學(xué)習(xí)!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、網(wǎng)站設(shè)計(jì)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。