最近在研究mongodb,在網上搜索發現針對.net 中使用mongodb的文章要么是早期的驅動版本,要么資料很少,所以寫個隨筆記錄一下,本文詳細的給大家介紹了在.Net中使用MongoDB的方法教程,需要的朋友可以參考借鑒,下面來一起看看吧。
什麼是MongoDB
MongoDB是基於文件的儲存的(而非表),是介於關聯式資料庫和非關聯式資料庫之間的產品,是非關係資料庫當中功能最豐富,最像關聯式資料庫的。他支援的資料結構非常鬆散,是類似json的bson格式,因此可以儲存比較複雜的資料類型。 Mongo最大的特點是他支援的查詢語言非常強大,其語法有點類似於物件導向的查詢語言,幾乎可以實現類似關係型資料庫單表查詢的絕大部分功能,而且還支援對資料建立索引。 Mongo主要解決的是大量資料的存取效率問題。因為Mongo主要是支援海量資料儲存的,所以Mongo還自備了一個出色的分散式檔案系統GridFS,可以支援海量的資料儲存。由於Mongo可以支援複雜的資料結構,而且具有強大的資料查詢功能,因此非常受到歡迎。
BSON是MongoDB的資料儲存格式。大家對於JSON比較熟悉,但是什麼是BSON呢BSON基於JSON格式,選擇JSON進行改造的原因主要是JSON的通用性及JSON的schemaless的特性。
BSON有以下特點
#1.更快的遍歷速度
對JSON格式來說,太大的JSON結構會導致資料遍歷非常慢。在JSON中,要跳過一個文件進行資料讀取,需要對此文件進行掃描才行,需要進行麻煩資料結構匹配,例如括號的匹配,而BSON對JSON的一大改進就是,它會將JSON的每一個元素的長度存在元素的頭部,這樣你只需要讀取到元素長度就能直接seek到指定的點上進行讀取了。
2.操作更簡易
對JSON來說,資料儲存是無類型的,例如你要修改基本一個值,從9到10,由於從一個字元變成了兩個,所以可能其後面的所有內容都需要往後移一位才可以。而使用BSON,你可以指定這個列為數字列,那麼無論數字從9長到10或100,我們都只是在儲存數字的那一位上進行修改,不會導致資料總長變大。當然,在MongoDB中,如果數字從整形增加到長整型,還是會導致資料總長變大的。
3.增加了額外的資料型別
JSON是一個很方便的資料交換格式,但是其型別比較有限。 BSON在其基礎上增加了「byte array」資料類型。這使得二進位的儲存不再需要先base64轉換後再存成JSON。大大減少了計算開銷和資料大小。當然,在有的時候,BSON相對JSON來說也沒有空間上的優勢,因為有了型別概念。
MongoDB windows下方安裝
MongoDB的安裝很簡單,設定好安裝路徑後,一直Next直到安裝結束,最大的坑就是MongoDB服務的安裝,下面具體說下MongoDB安裝之後的一些設定操作
1.在根目錄下建立資料庫路徑(data目錄)、日誌路徑(logs目錄)、日誌檔案(mongo.log文件)、設定路徑(conf目錄)我的安裝路徑是:D:\Program Files\mongodb
#2.在conf目錄下建立設定檔mongo.conf,檔案內容如下:
logpath=D:\Program Files\mongodb\logs\mongodb.log #日志输出文件路径 logappend=true #错误日志采用追加模式,配置这个选项后mongodb的日志会追加到现有的日志文件,而不是从新创建一个新文件 journal=true #启用日志文件,默认启用 quiet=true #这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false port=27017 #端口号 默认为27017 auth=true #启用验证 需要用户名密码
設定完成以上2個步驟就可以啟動MongoDB了
執行CMD 輸入指令(注意mongod的路徑)
mongod --config " D:\Program Files\mongodb\data \conf\mongo.conf"
3.創建並啟動MongoDB服務
如果每次都按照步驟三那樣操作,豈不是相當麻煩,按照如下命令來創建並啟動MongoDB服務,就可以透過windows服務來管理MongoDB的啟動和關閉了
mongod --config " D:\Program Files\mongodb\data \conf\mongo.conf" --install --serviceName "MongoDB" net start MongoDB
測試是否成功可以在瀏覽器中輸入http://localhost:27017/如果出現下圖表示服務安裝成功
#如果需要卸載MongoDB服務在CMD 中執行
mongod.exe --remove --serviceName "MongoDB"
前期準備工作完成了,就可以開始擼程式碼了
如何在.net 中使用MongoDB
首先在專案中引入MongoDB.Bson.dll,MongoDB.Driver.dll,MongoDB.Driver.Core .dll 我使用的是2.0版本的現在好多文章都是介紹使用1+版本的這也是我寫此文的目的引入驅動DLL後,就可以開始擼代碼了
部分代碼如下
private static MongoClient client; private static IMongoDatabase database; //本地配置 private const string MongoDBConnectionStr = "mongodb://localhost"; //数据库名称 private static string DefaultDataBaseName = "Test"; public MongoDBHelper() { GetConnection(DefaultDataBaseName); } /// <summary> /// 构造函数 指定数据库 /// </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> /// 异步插入一条数据,手动输入collection name /// </summary> public Task InsertAsync<T>(string collectionName, T obj) { if (database == null) { throw new Exception("没有指定数据库"); } var collection = database.GetCollection<T>(collectionName); return collection.InsertOneAsync(obj); } /// <summary> /// 异步插入一条数据,采用类型T的完全限定名作为collection name /// </summary> public Task InsertAsync<T>(T obj) { return InsertAsync(typeof(T).FullName, obj); } /// <summary> /// 异步插入多条数据,手动输入collection name /// </summary> public Task BatchInsertAsync<T>(string collectionName, IEnumerable<T> objs) { if (database == null) { throw new Exception("没有指定数据库"); } if (objs == null) { throw new ArgumentException(); } var collection = database.GetCollection<T>(collectionName); return collection.InsertManyAsync(objs); } /// <summary> /// 异步插入多条数据,采用类型T的完全限定名作为collection name /// </summary> public Task BatchInsertAsync<T>(IEnumerable<T> objs) { return BatchInsertAsync(typeof(T).FullName, objs); } /// <summary> /// 插入一条数据 /// </summary> public void Insert<T>(T obj) { InsertAsync(obj).Wait(); } /// <summary> /// 插入多条数据 /// </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("没有指定数据库"); } 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> /// 取符合条件的数据 sort中多个排序条件逗号分隔,默认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> /// 取符合条件的数据 sort中多个排序条件逗号分隔,默认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); }
以上是MongoDB在.Net中的使用方法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

C#和.NET運行時緊密合作,賦予開發者高效、強大且跨平台的開發能力。 1)C#是一種類型安全且面向對象的編程語言,旨在與.NET框架無縫集成。 2).NET運行時管理C#代碼的執行,提供垃圾回收、類型安全等服務,確保高效和跨平台運行。

要開始C#.NET開發,你需要:1.了解C#的基礎知識和.NET框架的核心概念;2.掌握變量、數據類型、控制結構、函數和類的基本概念;3.學習C#的高級特性,如LINQ和異步編程;4.熟悉常見錯誤的調試技巧和性能優化方法。通過這些步驟,你可以逐步深入C#.NET的世界,並編寫高效的應用程序。

C#和.NET的關係是密不可分的,但它們不是一回事。 C#是一門編程語言,而.NET是一個開發平台。 C#用於編寫代碼,編譯成.NET的中間語言(IL),由.NET運行時(CLR)執行。

C#.NET依然重要,因為它提供了強大的工具和庫,支持多種應用開發。 1)C#結合.NET框架,使開發高效便捷。 2)C#的類型安全和垃圾回收機制增強了其優勢。 3).NET提供跨平台運行環境和豐富的API,提升了開發靈活性。

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

C#和.NET通過不斷的更新和優化,適應了新興技術的需求。 1)C#9.0和.NET5引入了記錄類型和性能優化。 2).NETCore增強了雲原生和容器化支持。 3)ASP.NETCore與現代Web技術集成。 4)ML.NET支持機器學習和人工智能。 5)異步編程和最佳實踐提升了性能。

c#.netissutableforenterprise-levelapplications withemofrosoftecosystemdueToItsStrongTyping,richlibraries,androbustperraries,androbustperformance.however,itmaynotbeidealfoross-platement forment forment forment forvepentment offependment dovelopment toveloperment toveloperment whenrawspeedsportor whenrawspeedseedpolitical politionalitable,

C#在.NET中的編程過程包括以下步驟:1)編寫C#代碼,2)編譯為中間語言(IL),3)由.NET運行時(CLR)執行。 C#在.NET中的優勢在於其現代化語法、強大的類型系統和與.NET框架的緊密集成,適用於從桌面應用到Web服務的各種開發場景。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中