<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

        在.Net中使用MongoDB的方法教程

        來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 22:35:37
        文檔

        在.Net中使用MongoDB的方法教程

        在.Net中使用MongoDB的方法教程:什么是MongoDB MongoDB是基于文檔的存儲的(而非表),是一個介于關(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格式,因此可以存儲比較復(fù)雜的數(shù)據(jù)類型。Mongo最大
        推薦度:
        導(dǎo)讀在.Net中使用MongoDB的方法教程:什么是MongoDB MongoDB是基于文檔的存儲的(而非表),是一個介于關(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格式,因此可以存儲比較復(fù)雜的數(shù)據(jù)類型。Mongo最大

        什么是MongoDB

        MongoDB是基于文檔的存儲的(而非表),是一個介于關(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格式,因此可以存儲比較復(fù)雜的數(shù)據(jù)類型。Mongo最大的特點(diǎn)是他支持的查詢語言非常強(qiáng)大,其語法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對數(shù)據(jù)建立索引。Mongo主要解決的是海量數(shù)據(jù)的訪問效率問題。因?yàn)镸ongo主要是支持海量數(shù)據(jù)存儲的,所以Mongo還自帶了一個出色的分布式文件系統(tǒng)GridFS,可以支持海量的數(shù)據(jù)存儲。由于Mongo可以支持復(fù)雜的數(shù)據(jù)結(jié)構(gòu),而且?guī)в袕?qiáng)大的數(shù)據(jù)查詢功能,因此非常受到歡迎。

        BSON是MongoDB的數(shù)據(jù)存儲格式。大家對于JSON比較熟悉,但是什么是BSON呢BSON基于JSON格式,選擇JSON進(jìn)行改造的原因主要是JSON的通用性及JSON的schemaless的特性。

        BSON具有如下特點(diǎn)

        1.更快的遍歷速度

          對JSON格式來說,太大的JSON結(jié)構(gòu)會導(dǎo)致數(shù)據(jù)遍歷非常慢。在JSON中,要跳過一個文檔進(jìn)行數(shù)據(jù)讀取,需要對此文檔進(jìn)行掃描才行,需要進(jìn)行麻煩數(shù)據(jù)結(jié)構(gòu)匹配,比如括號的匹配,而BSON對JSON的一大改進(jìn)就是,它會將JSON的每一個元素的長度存在元素的頭部,這樣你只需要讀取到元素長度就能直接seek到指定的點(diǎn)上進(jìn)行讀取了。

        2.操作更簡易

          對JSON來說,數(shù)據(jù)存儲是無類型的,比如你要修改基本一個值,從9到10,由于從一個字符變成了兩個,所以可能其后面的所有內(nèi)容都需要往后移一位才可以。而使用BSON,你可以指定這個列為數(shù)字列,那么無論數(shù)字從9長到10還是100,我們都只是在存儲數(shù)字的那一位上進(jìn)行修改,不會導(dǎo)致數(shù)據(jù)總長變大。當(dāng)然,在MongoDB中,如果數(shù)字從整形增大到長整型,還是會導(dǎo)致數(shù)據(jù)總長變大的。

        3.增加了額外的數(shù)據(jù)類型

          JSON是一個很方便的數(shù)據(jù)交換格式,但是其類型比較有限。BSON在其基礎(chǔ)上增加了“byte array”數(shù)據(jù)類型。這使得二進(jìn)制的存儲不再需要先base64轉(zhuǎn)換后再存成JSON。大大減少了計(jì)算開銷和數(shù)據(jù)大小。當(dāng)然,在有的時候,BSON相對JSON來說也并沒有空間上的優(yōu)勢,因?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 #錯誤日志采用追加模式,配置這個選項(xiàng)后mongodb的日志會追加到現(xiàn)有的日志文件,而不是從新創(chuàng)建一個新文件 journal=true #啟用日志文件,默認(rèn)啟用 quiet=true #這個選項(xiàng)可以過濾掉一些無用的日志信息,若需要調(diào)試使用請?jiān)O(shè)置為false port=27017 #端口號 默認(rèn)為27017 auth=true #啟用驗(yàn)證 需要用戶名密碼

        配置完成以上2個步驟 就可以 啟動MongoDB了

        運(yùn)行CMD 輸入命令 (注意 mongod的路徑)

        mongod --config " D:\Program Files\mongodb\data \conf\mongo.conf"

        3.創(chuàng)建并啟動MongoDB服務(wù)

        如果每次都按照步驟三那樣操作,豈不是相當(dāng)麻煩,按照如下命令來創(chuàng)建并啟動MongoDB服務(wù),就可以通過windows服務(wù)來管理MongoDB的啟動和關(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ū)動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);
        
        }
        
         
        
        /// <summary>
        
        /// 構(gòu)造函數(shù) 指定數(shù)據(jù)庫
        
        /// </summary>
        
        /// <param name="dataBaseName"></param>
        
        public MongoDBHelper(string dataBaseName)
        
        {
        
         GetConnection(dataBaseName);
        
        }
        
         
        
        private static void GetConnection(string dataBaseName)
        
        {
        
         client = new MongoClient(MongoDBConnectionStr);
        
         database = client.GetDatabase(dataBaseName);
        
        }
        
         
        
        /// <summary>
        
        /// 異步插入一條數(shù)據(jù),手動輸入collection name
        
        /// </summary>
        
        public Task InsertAsync<T>(string collectionName, T obj)
        
        {
        
         if (database == null)
        
         {
        
         throw new Exception("沒有指定數(shù)據(jù)庫");
        
         }
        
         var collection = database.GetCollection<T>(collectionName);
        
         return collection.InsertOneAsync(obj);
        
        }
        
         
        
        /// <summary>
        
        /// 異步插入一條數(shù)據(jù),采用類型T的完全限定名作為collection name
        
        /// </summary>
        
        public Task InsertAsync<T>(T obj)
        
        {
        
         return InsertAsync(typeof(T).FullName, obj);
        
        }
        
         
        
        /// <summary>
        
        /// 異步插入多條數(shù)據(jù),手動輸入collection name
        
        /// </summary>
        
        public Task BatchInsertAsync<T>(string collectionName, IEnumerable<T> objs)
        
        {
        
         if (database == null)
        
         {
        
         throw new Exception("沒有指定數(shù)據(jù)庫");
        
         }
        
         if (objs == null)
        
         {
        
         throw new ArgumentException();
        
         }
        
         var collection = database.GetCollection<T>(collectionName);
        
         return collection.InsertManyAsync(objs);
        
        }
        
         
        
        /// <summary>
        
        /// 異步插入多條數(shù)據(jù),采用類型T的完全限定名作為collection name
        
        /// </summary>
        
        public Task BatchInsertAsync<T>(IEnumerable<T> objs)
        
        {
        
         return BatchInsertAsync(typeof(T).FullName, objs);
        
        }
        
         
        
        /// <summary>
        
        /// 插入一條數(shù)據(jù)
        
        /// </summary>
        
        public void Insert<T>(T obj)
        
        {
        
         InsertAsync(obj).Wait();
        
        }
        
         
        
        /// <summary>
        
        /// 插入多條數(shù)據(jù)
        
        /// </summary>
        
        public void Insert<T>(IEnumerable<T> objs)
        
        {
        
         BatchInsertAsync(objs).Wait();
        
        }
        
         
        
        /// <summary>
        
        /// MongoDB C# Driver的Find方法,返回IFindFluent。手動輸入collection name
        
        /// </summary>
        
        public IFindFluent<T, T> Find<T>(string collectionName, FilterDefinition<T> filter, FindOptions options = null)
        
        {
        
         if (database == null)
        
         {
        
         throw new Exception("沒有指定數(shù)據(jù)庫");
        
         }
        
         var collection = database.GetCollection<T>(collectionName);
        
         return collection.Find(filter, options);
        
        }
        
         
        
        /// <summary>
        
        /// MongoDB C# Driver的Find方法,返回IFindFluent。采用類型T的完全限定名作為collection name
        
        /// </summary>
        
        public IFindFluent<T, T> Find<T>(FilterDefinition<T> filter, FindOptions options = null)
        
        {
        
         return Find(typeof(T).FullName, filter, options);
        
        }
        
         
        
        /// <summary>
        
        /// 取符合條件的數(shù)據(jù) sort中多個排序條件逗號分隔,默認(rèn)asc
        
        /// </summary>
        
        public List<T> Get<T>(Expression<Func<T, bool>> condition, int skip, int limit, string sort)
        
        {
        
         return Get(new List<Expression<Func<T, bool>>> { condition }, skip, limit, sort);
        
        }
        
         
        
        public List<T> Get<T>(Expression<Func<T, bool>> condition)
        
        {
        
         return Get(condition, 0, 0, null);
        
        }
        
         
        
        /// <summary>
        
        /// 取符合條件的數(shù)據(jù) sort中多個排序條件逗號分隔,默認(rèn)asc
        
        /// </summary>
        
        public List<T> Get<T>(List<Expression<Func<T, bool>>> conditions, int skip, int limit, string sort)
        
        {
        
         if (conditions == null || conditions.Count == 0)
        
         {
        
         conditions = new List<Expression<Func<T, bool>>> { x => true };
        
         }
        
         var builder = Builders<T>.Filter;
        
         var filter = builder.And(conditions.Select(x => builder.Where(x)));
        
         
        
         var ret = new List<T>();
        
         try
        
         {
        
         List<SortDefinition<T>> sortDefList = new List<SortDefinition<T>>();
        
         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<T>.Sort.Ascending(sl[0]));
        
         }
        
         else if (sl.Length >= 2 && sl[1].ToLower() == "desc")
        
         {
        
         sortDefList.Add(Builders<T>.Sort.Descending(sl[0]));
        
         }
        
         }
        
         }
        
         var sortDef = Builders<T>.Sort.Combine(sortDefList);
        
         ret = Find(filter).Sort(sortDef).Skip(skip).Limit(limit).ToListAsync().Result;
        
         }
        
         catch (Exception e)
        
         {
        
         //異常處理
        
         }
        
         return ret;
        
        }
        
         
        
        public List<T> Get<T>(List<Expression<Func<T, bool>>> conditions)
        
        {
        
         return Get(conditions, 0, 0, null);
        
        } 

        示例代碼中只實(shí)現(xiàn)了插入和查詢功能,后續(xù)會將完整代碼上傳

        總結(jié)

        本文只記錄了MongoDB的最基本使用,后續(xù)會介紹副本級,主從自動備份等機(jī)制與實(shí)現(xiàn)方式,感興趣的朋友們請繼續(xù)關(guān)注腳本之家,謝謝大家對腳本之家的支持。

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        在.Net中使用MongoDB的方法教程

        在.Net中使用MongoDB的方法教程:什么是MongoDB MongoDB是基于文檔的存儲的(而非表),是一個介于關(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格式,因此可以存儲比較復(fù)雜的數(shù)據(jù)類型。Mongo最大
        推薦度:
        標(biāo)簽: 教程 的方法 net
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 一道本在线免费视频| 亚洲欧洲专线一区| 免费一区二区三区| 亚洲国产综合无码一区| 中文永久免费观看网站| 久久精品国产亚洲综合色| 中文无码成人免费视频在线观看| 亚洲中久无码永久在线观看同| a级毛片免费在线观看| 亚洲国产精品无码一线岛国| 久久国产精品免费视频| 亚洲福利一区二区三区| 猫咪社区免费资源在线观看| 亚洲另类自拍丝袜第五页| 大胆亚洲人体视频| 精品国产污污免费网站入口在线| 国产l精品国产亚洲区在线观看| 色欲国产麻豆一精品一AV一免费 | 亚洲国产乱码最新视频| 日本免费人成黄页在线观看视频 | 久久久精品国产亚洲成人满18免费网站 | 国产成人综合亚洲绿色| 国产av无码专区亚洲国产精品| 182tv免费视频在线观看| 亚洲午夜精品一区二区公牛电影院| 精品熟女少妇AV免费观看| 特级一级毛片免费看| 亚洲成a人片在线观看日本| 久久久久久免费视频| 国产亚洲精品第一综合| 亚洲成AV人片在线观看WWW| 免费看国产成年无码AV片| 黄色免费网址大全| 亚洲一区影音先锋色资源| 我要看WWW免费看插插视频| 久久99精品免费一区二区| 亚洲精品无码久久毛片波多野吉衣| 在线看片无码永久免费视频 | 一区二区免费电影| 亚洲精品乱码久久久久久下载| 成人免费视频试看120秒|