- Dec 13 Fri 2024 10:36
-
五福臨門的實踐之道
- Dec 13 Fri 2024 10:10
-
11.MongoDB 應用範例
11. MongoDB 應用範例
學習目標
了解 IIS 服務與 Web API 專案的關係以及基本操作。
在 Visual Studio 2022 上建立 Web API 專案,結合 MongoDB 資料庫,實作會員系統 Web API。
使用 Postman 和 Swagger 測試 API 功能,驗證功能正確性。
第11.1節 Web API 概念說明
API 的概念
API(應用程式介面)是一種標準化的介面,用於不同應用程式或系統之間的溝通。其主要功能是:
隱藏系統內部邏輯:使用者無需了解系統的內部運作。
提供簡單接口:讓開發者以更便捷的方式操作系統資源。
例如,當使用者需要查詢 MongoDB 資料時,可以通過 API 執行指定的操作,而無需深入了解底層的資料庫通信協定。
API 的特點
標準化:API 設計具有固定的規範,例如參數格式、請求方法等。
高度封裝:內部邏輯對外不可見,僅暴露功能入口。
平台無關性:API 可以應用於不同操作系統和開發語言。
用戶端與伺服器通訊方式
Web API 的核心在於實現用戶端(Client)與伺服器(Server)之間的通信。這種通信通常基於 TCP/IP 協定,通過 HTTP 方法進行。
關鍵元素
IP 位址
每個連接網路的設備都擁有唯一的 IP 位址,例如:
127.0.0.1:本地環回地址,用於測試。
192.168.x.x:內部局域網地址。
DNS(域名系統)
DNS 負責將域名(如 www.google.com)轉換為 IP 位址,以便用戶方便記憶。
Port(埠號)
埠號用於區分不同應用程序,例如:
Web 服務使用埠號 80 或 443。
MongoDB 預設埠號為 27017。
數據封包(Data Packet)
每次請求和回應會分解成多個封包,封包內包含標頭(Header)和有效數據(Payload)。
範例:使用 MongoDB API
用戶通過 Mongo Shell 執行指令:db.authors.find({})。
伺服器返回結果:
json
複製程式碼
[
{ "id": "095369001", "name": "黃小嘉" },
{ "id": "105369012", "name": "周小樵" }
]
這是一個典型的 API 請求和回應過程。
會員系統 Web API 功能設計
假設我們運行一個電子商務平台,需要實作以下功能模組:
新增會員
修改會員
刪除會員
查詢會員資訊
HTTP 方法與用途
方法 描述
GET 用於讀取數據或查詢資訊。
POST 用於新增資源或數據。
PUT 用於更新現有數據。
DELETE 用於刪除指定資源。
Web API 專案實作流程
1. 建立 Web API 專案
開啟 Visual Studio 2022,選擇建立新專案,選擇 ASP.NET Core Web API 範本。
輸入專案名稱(如 MemberAPI),選擇 .NET 8.0 版本。
安裝 MongoDB 驅動程式:
在工具列選擇「工具 > NuGet 套件管理員」。
輸入指令安裝套件:Install-Package MongoDB.Driver -Version 2.26.0。
2. 定義資料結構
在專案的 Models 資料夾中,定義資料結構對應 MongoDB 的集合結構。
類別定義範例:
csharp
複製程式碼
public class MembersDocument {
public string uid { get; set; } // 會員編號
public string name { get; set; } // 會員姓名
public string phone { get; set; } // 會員電話
}
3. 實作 API 功能
3.1 新增會員資訊(POST)
請求格式:
json
複製程式碼
{
"uid": "1",
"name": "Nathan",
"phone": "0955487135"
}
回應格式:
json
複製程式碼
{
"ok": true,
"errMsg": ""
}
控制器程式碼:
csharp
複製程式碼
[HttpPost]
public AddMemberResponse Post(AddMemberRequest request) {
var response = new AddMemberResponse();
var client = new MongoClient("mongodb://localhost:27017");
var db = client.GetDatabase("MemberDB");
var col = db.GetCollection<MembersDocument>("members");
var existing = col.Find(m => m.uid == request.uid).FirstOrDefault();
if (existing != null) {
response.ok = false;
response.errMsg = "會員已存在";
} else {
col.InsertOne(new MembersDocument {
uid = request.uid,
name = request.name,
phone = request.phone
});
response.ok = true;
}
return response;
}
3.2 修改會員資訊(PUT)
請求格式:
json
複製程式碼
{
"uid": "1",
"name": "John",
"phone": "0987654321"
}
回應格式:
json
複製程式碼
{
"ok": true,
"errMsg": ""
}
控制器程式碼:
csharp
複製程式碼
[HttpPut]
public EditMemberResponse Put(EditMemberRequest request) {
var response = new EditMemberResponse();
var client = new MongoClient("mongodb://localhost:27017");
var db = client.GetDatabase("MemberDB");
var col = db.GetCollection<MembersDocument>("members");
var update = Builders<MembersDocument>.Update
.Set(m => m.name, request.name)
.Set(m => m.phone, request.phone);
var result = col.UpdateOne(m => m.uid == request.uid, update);
response.ok = result.ModifiedCount > 0;
response.errMsg = result.ModifiedCount == 0 ? "更新失敗" : "";
return response;
}
3.3 刪除會員資訊(DELETE)
請求 URL:
bash
複製程式碼
DELETE https://localhost:44333/api/member/1
回應格式:
json
複製程式碼
{
"ok": true,
"errMsg": ""
}
控制器程式碼:
csharp
複製程式碼
[HttpDelete("{uid}")]
public DeleteMemberResponse Delete(string uid) {
var response = new DeleteMemberResponse();
var client = new MongoClient("mongodb://localhost:27017");
var db = client.GetDatabase("MemberDB");
var col = db.GetCollection<MembersDocument>("members");
var result = col.DeleteOne(m => m.uid == uid);
response.ok = result.DeletedCount > 0;
response.errMsg = result.DeletedCount == 0 ? "刪除失敗" : "";
return response;
}
4. 測試 API 功能
測試工具
Postman:
模擬 HTTP 請求,測試 API 功能。
範例:
新增會員:發送 POST 請求,確認伺服器返回成功訊息。
查詢會員:發送 GET 請求,驗證返回的會員清單正確。
Swagger:
提供互動式文檔,方便開發者理解 API 規範並測試功能。
測試結果範例
新增會員:
json
複製程式碼
{ "ok": true, "errMsg": "" }
查詢全部會員:
json
複製程式碼
[
{ "uid": "1", "name": "Nathan", "phone": "0955487135" },
{ "uid": "2", "name": "Bob", "phone": "0985462782" }
]
結論
本章節完整講解如何使用 MongoDB 與 ASP.NET Core Web API 實作會員系統,並通過 Postman 測試功能。通過以上實踐,可以掌握 API 設計與測試的核心技能,為未來的應用開發奠定基礎。
- Dec 13 Fri 2024 09:58
-
10.MongoDB常見問題與疑難排解
- Dec 13 Fri 2024 09:48
-
9. MongoDB聚合管線的最佳實踐與性能優化
背景與需求分析
背景
在資料統計系統的開發中,面對的挑戰主要是如何高效地對結構化資料進行分類、篩選、統計等操作。MongoDB 作為 NoSQL 資料庫,其強大的聚合管線功能提供了靈活的資料操作方式,可以減少應用程式與資料庫之間的交互負擔,提升系統效能。
需求
本實踐的目標是實現兩個功能:
- 計算台北市各分區消費者數量與平均年齡:此功能需要根據
district分組,並統計每個分組的記錄數量與age欄位的平均值。 - 計算 107 年全台灣的出生、死亡、結婚與離婚統計數據:此功能需針對
year為 107 的資料,進行多項數據的加總。
工具與環境準備
MongoDB
MongoDB 是一款基於文件的 NoSQL 資料庫,提供強大的查詢功能和聚合管線支援,特別適合處理結構化與半結構化的資料。
C# 與 MongoDB.Driver
- C# 是一種成熟且高效的開發語言,適用於構建穩健的後端服務。
- MongoDB.Driver 是 MongoDB 提供的官方 .NET 驅動程式,可以方便地將 MongoDB 的操作融入 C# 應用程式中。
安裝指令:
資料結構設計
CustomersDocument
對應台北市消費者的分區與年齡資訊,數據結構如下:
district: 表示消費者所在的分區(如信義、大安)。age: 表示消費者的年齡。
PeopleDocument
對應全台灣的年度統計數據,結構如下:
year: 年份。births: 出生人數。deaths: 死亡人數。marriages: 結婚對數。divorces: 離婚對數。
聚合管線的使用
基本概念
MongoDB 的聚合管線由多個階段組成,每個階段執行特定的操作,如篩選、分組、排序等。每個階段的輸出作為下一階段的輸入,最終返回處理結果。
實踐過程
功能一:計算台北市各分區消費者數量與平均年齡
數據準備 匯入消費者數據:
MongoDB 聚合查詢 使用
$match篩選出city為 "台北市" 的記錄,然後使用$group按district分組,計算每組的平均年齡與數量:C# 實現邏輯
- 使用
Aggregate()方法,傳遞匹配與分組操作。 - 分組後的結果包括分區名稱、平均年齡和總數量。
- 使用
功能二:計算 107 年全台灣統計數據
數據準備 匯入統計數據:
MongoDB 聚合查詢 使用
$group將所有資料聚合為一條記錄,分別計算出生、死亡、結婚、離婚的總數:C# 實現邏輯
- 使用
Find()方法篩選year == 107的記錄。 - 將結果直接讀取並輸出。
- 使用
完整實現程式碼
完整程式碼如之前提供的主程式部分,詳細解釋如下:
建立 MongoClient 並連接資料庫
選擇集合
控制台交互 根據輸入選擇操作功能,執行不同的統計邏輯。
效能與應用場景分析
高效性
- 聚合管線在資料庫層執行,減少資料傳輸和程式處理負擔。
- 篩選、分組、計算等操作一次完成,避免多次查詢的資源消耗。
應用場景
- 適用於電商後端數據分析、人口普查、業務報表生成等需求。
擴展性
- 可結合更多聚合運算子(如
$project、$sort)進行進一步的資料處理。
- 可結合更多聚合運算子(如
結論
本實踐展示了如何使用 MongoDB 聚合管線處理複雜查詢需求,並結合 C# 開發實現資料統計系統。這種方式不僅簡化了應用程式邏輯,還顯著提升了效能與可維護性,是構建高效資料處理系統的重要工具。
- Dec 13 Fri 2024 09:39
-
8. MongoDB 高效策略
- Dec 12 Thu 2024 16:30
-
7.MongoDB 基本操作進階應用:新增、更新與刪除全面解析
在前面章節中,我們已經掌握 MongoDB 的查詢技巧,瞭解如何透過運算子、條件組合與映射來篩選所需資料。本章更進一步,從查詢延伸至新增(Insert)、更新(Update)與刪除(Delete)等核心 CRUD 操作,並介紹批次寫入(Bulk Write)這類提升效率的進階技巧。
- Dec 12 Thu 2024 16:23
-
6.深入MongoDB查詢與映射技術:從基礎原理到企業實務應用的全方位指南
在本書先前章節中,讀者已學會 MongoDB 的基本資料操作技巧,如新增、更新、刪除以及透過 Compass 或指令列查詢資料。第 6 章往前更進一步,探討 MongoDB 中多元而彈性的查詢運算子與映射技術,讓開發者在實務應用中能有更細緻的資料篩選、分析與呈現能力。透過這些查詢運算子與映射(Projection),開發者能在應用程式中實現更複雜的商業邏輯與決策判斷,進而滿足多樣化的企業需求。
- Dec 12 Thu 2024 16:12
-
5.MongoDB從開發環境搭建到程式語言整合:以 C# 與 Visual Studio 實作 MongoDB 資料庫操作
前面章節著重在 MongoDB 基本操作、指令與 GUI 工具(如 Compass)的使用教學,這些對了解 MongoDB 很有幫助。然而,實務上的軟體開發並不只是一個資料庫環境,而是將資料庫、程式語言、框架、測試、除錯、部署與持續整合(CI/CD)結合成一個完整的生產環境。「第5章 安裝 MongoDB 資料庫的整合開發環境與基本操作」正是從觀念上為讀者搭起橋樑,說明如何選擇並安裝整合開發環境(IDE)—本文以 Visual Studio 2022 為例—並在 C# 程式中整合 MongoDB Driver,實際將程式語言與資料庫串接。
- Dec 12 Thu 2024 16:07
-
4.MongoDB Compass 實務運用全貌:從組織內部協作到企業級資料管理的高效方案
在企業與組織的真實環境中,資料庫管理並不只是安裝與簡單的 CRUD 操作。資料庫維運人員(DBA)、後端工程師、資料工程師,以及有時具備商業分析背景的使用者,都需要一個易於上手且功能直覺的介面來進行日常資料處理與問題排查。而 MongoDB Compass 作為官方提供的 GUI 工具,正是一個能讓團隊更快進入狀況、提升溝通與協作效率的利器。
- Dec 12 Thu 2024 15:56
-
3.MongoDB 資料庫管理工具的實務運用:全面提升生產力、資源配置效率與市場影響力的關鍵推手
在當代資訊社會中,組織、企業乃至政府單位常面臨巨量的數據洪流,這些來自使用者行為、線上交易紀錄、感測器數據、社群媒體互動、物聯網設備等的資料,構成了現代經濟活動不可或缺的基石。第 3 章中提及的 MongoDB 資料庫管理工具(如 mongosh、mongodump、mongorestore、mongostat、mongotop)表面上是技術人員日常維運的一部分,但其影響遠遠超出 IT 團隊本身。
- Dec 12 Thu 2024 15:51
-
2.MongoDB 實務應用全方位解析:從開發與維運到資源優化的完整指引
在現代企業環境中,數位化轉型已成為常態。企業所面臨的挑戰不僅在於處理海量資料,更重要的是快速回應市場變化並精準分配資源。傳統關聯式資料庫(RDBMS)固然有其價值,但面對今日動態、多樣且大量的數據,已逐漸出現限制。NoSQL 資料庫(Not Only SQL)中的 MongoDB,憑藉其文件導向(Document Oriented)與無綱要(Schemaless)特性,提供更高的彈性與擴充性。透過 MongoDB 的應用,企業可在開發、部署、運營和維護上大幅提升生產效率與資源配置效率。以下將從多重面向,詳細闡述 MongoDB 在實務上的具體貢獻。
- Dec 12 Thu 2024 15:42
-
1. NoSQL MongoDB
1. 實務應用的驅動因素
在正式展開案例前,先釐清為何產業界願意採用 NoSQL。歸納來說,主要有以下幾個驅動因素: