一、前言及MongoDB的介紹
最近在整合自己的框架,順便把MongoDBD的最簡單CRUD重構一下作為組件化整合到asp.net core專案中,當然這篇文章中沒有講解mongodb的叢集部署,等有機會分享一下。
首先,我們在MongoDB的官方文件中看到,MongoDb的2.4以上的For .Net的驅動程式是支援.Net Core 2.0的。
針對MongoDB,我想大家應該不陌生,沒有用過也聽過。
相關學習推薦:ASP.NET影片教學#
1、mongodb是什麼?
MongoDB是一個基於分散式檔案儲存的資料庫,為web應用提供可擴展的高效能資料儲存解決方案,介於關聯式資料庫和非關係型資料庫的產品,是非關聯式資料庫中功能最豐富的。針對於資料處理是一把利器。
2、什麼是關係型資料庫和非關係型資料庫?
關係型資料庫:在我們所使用的sqlserver、mysql等,這些都是關聯式資料庫,而且關聯式資料庫是遵循ACID原則的,嚴格的一致性。
非關係型資料庫:也叫作NoSQL,用與超大規模資料的存儲,這些類型的資料儲存不需要固定的模式,無需多餘的操作就可以橫向擴展。
3、RDBMS VS NoSQL
RDBMS:
高度組織結構化資料
結構化查詢語言
# 資料和關係都儲存在單獨的表中
嚴格一致性
基礎事務
NoSQL:
沒有聲明性查詢語言
NoSQL:
沒有聲明性查詢語言
鍵-值對存儲,列存儲、文檔存儲等
最終一致性
非結構化和不可預測資料
CAP定理、高可用、高效能、高擴展我相信講到這裡,眼尖的同學應該有註意到CAP定理和最終一致性,肯定會聯想到分散式系統,在這裡給你大大的一個讚。在分散式系統中可以完美的結合nosql,提高我們的效能。
4、介紹RDBMS與Mongodb的一些概念,有助於幫助大家理解
二、asp.net core整合mongoDB
1、為了示範方便我下載了windows版本的mongodb server大家可以自行去官網下載,然後針對於視覺化介面,我採用了Robo 3T 這個工具。很簡潔美觀的視覺化工具。推薦大家使用。
2、開始在專案中設定我們的mongodb吧
第一步:我新建一個Core2 .0類別庫引入了「MongoDB.Driver」 這個nuget套件。 接著擴充了Startup.cs 中的Services的擴充方法
//扩展方法public static class ServiceCollectionExtensions { public static void AddMongoDB(this IServiceCollection services, IConfiguration configuration) { services.Configure<Settings>(options => { options.ConnectionString = configuration.GetSection("MongoConnection:ConnectionString").Value; options.Database = configuration.GetSection("MongoConnection:Database").Value; }); } }
#第二步:重構封裝了mongodb的CRUD類,此處大家可以自行封裝,只展示了查找和新增。
public class MongoDBBase { private readonly IMongoDatabase _database = null; public MongoDBBase(string connectionString, string databaseName) { var client = new MongoClient(connectionString); if (client != null) { _database = client.GetDatabase(databaseName); } } #region SELECT /// <summary> /// 根据查询条件,获取数据 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="id"></param> /// <returns></returns> public List<T> GetList<T>(Expression<Func<T, bool>> conditions = null) { var collection = _database.GetCollection<T>(typeof(T).Name); if (conditions != null) { return collection.Find(conditions).ToList(); } return collection.Find(_ => true).ToList(); }#endregion #region INSERT/// <summary> /// 插入多条数据,数据用list表示 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="list"></param> /// <returns></returns> public List<T> InsertMany<T>(List<T> list) { var collection = _database.GetCollection<T>(typeof(T).Name); collection.InsertMany(list); return list; } #endregion }第三步:新建一個asp.net core webapi 項目,引用此類庫進行演示
在項目中的appsetting.json 新增mongodb的連接字串:我在這邊使用自訂的資料名稱testdb,在插入mongodb的時候會自動在建立資料庫和集合以及文件。接著往下看
"MongoConnection": { //mongodb数据库连接 "ConnectionString": "mongodb://127.0.0.1:27017", "Database": "testdb", "IsSSL": true },第四步:新建一個mongodb測試控制器,展示了插入單條和多條以及查詢的介面。
[Produces("application/json")]
[Route("api/MongoDB/[action]")]
public class MongoDBController : Controller
{
private readonly MongoDBBase _context = null;
public MongoDBController(IOptions<Settings> settings)
{
_context = new MongoDBBase(settings.Value.ConnectionString, settings.Value.Database);
}
[HttpGet]
public IActionResult AddList()
{
List<MongoDBPostTest> list = new List<MongoDBPostTest>()
{
new MongoDBPostTest()
{
Id = "2",
Body = "Test note 3",
UpdatedOn = DateTime.Now,
UserId = 1,
HeaderImage = new NoteImage
{
ImageSize = 10,
Url = "http://localhost/image1.png",
ThumbnailUrl = "http://localhost/image1_small.png"
}
},
new MongoDBPostTest()
{
Id = "3",
Body = "Test note 4",
UpdatedOn = DateTime.Now,
UserId = 1,
HeaderImage = new NoteImage
{
ImageSize = 14,
Url = "http://localhost/image3.png",
ThumbnailUrl = "http://localhost/image3_small.png"
}
}
};
try
{
_context.InsertMany(list);
}
catch (Exception ex)
{
throw;
}
return Ok("成功");
}
[HttpGet]
public Result<List<MongoDBPostTest>> SelectSingle()
{
//无条件
var list = _context.GetList<MongoDBPostTest>();
//有条件
//var list = _context.GetList<MongoDBPostTest>(a => a.Id == "1");
//得到单条数据,无条件
//var list = _context.GetSingle<MongoDBPostTest>();
//得到单条数据,有条件
//var list = _context.GetSingle<MongoDBPostTest>(a => a.Id == "3");
ObjectId internalId = _context.GetInternalId("5bbf41651d3b66668cbb5bfc");
var a = _context.GetSingle<MongoDBPostTest>(note => note.Id == "5bbf41651d3b66668cbb5bfc" || note.InternalId == internalId);
return ResHelper.Suc(1, list, "成功");
}
}
測試類別
public class MongoDBPostTest { [BsonId] // standard BSonId generated by MongoDb public ObjectId InternalId { get; set; } public string Id { get; set; } public string Body { get; set; } = string.Empty; [BsonDateTimeOptions] public DateTime UpdatedOn { get; set; } = DateTime.Now; public NoteImage HeaderImage { get; set; } public int UserId { get; set; } = 0; } public class NoteImage { public string Url { get; set; } = string.Empty; public string ThumbnailUrl { get; set; } = string.Empty; public long ImageSize { get; set; } = 0L; }第五步:運行項目,執行一下。
然後我們執行以下查的動作:把我們剛才插入的資料回傳回來了。
注意:這邊有一個坑有待解決,就是mongodb儲存的時間是UTC,會跟我們的本地時間相差8小時。因此這邊需要特殊處理時間。
三、總結
至此,mongodb的簡單運用已演示完畢,後期大家根據官方文檔可進行擴展,越擴展到後面,會覺得越來越有趣。感謝大家的支持。 Thank you。
以上是學習asp.net core整合MongoDB的完整步驟的詳細內容。更多資訊請關注PHP中文網其他相關文章!

要開始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服務的各種開發場景。

C#是一種現代、面向對象的編程語言,由微軟開發並作為.NET框架的一部分。 1.C#支持面向對象編程(OOP),包括封裝、繼承和多態。 2.C#中的異步編程通過async和await關鍵字實現,提高應用的響應性。 3.使用LINQ可以簡潔地處理數據集合。 4.常見錯誤包括空引用異常和索引超出範圍異常,調試技巧包括使用調試器和異常處理。 5.性能優化包括使用StringBuilder和避免不必要的裝箱和拆箱。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

禪工作室 13.0.1
強大的PHP整合開發環境

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

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