---
# System prepended metadata

title: Web 企業運算 - Week 11

---

# Web 企業運算 - Week 11
M0861101 許家維

### 本週自學清單
* MongoDB 基礎建置
* Angular + MongoDB 使用
* Postman 基礎指令使用
* 本文網址 : https://hackmd.io/Q2Fifz4BS_WcjrmXDYfaBw
* 未來將把文章陸續整理到Google blogger 中
* 期中履歷版網站上傳，加入部分如下
    * 照片更換
    * 調整成正式履歷格式
    * 加入Git版本控制
    * https://jacky030hsu.github.io/jacky_resume/

### 上課內容程式碼
app.js 內容
![](https://i.imgur.com/R2EkMg2.png)
todo.js 內容
![](https://i.imgur.com/yupyXuS.png)
router.js 內容
![](https://i.imgur.com/JzuOHx2.png)





### 學習筆記&成果
**MongoDB**
一種 NoSQL 資料庫，MongoDB 屬於文件資料庫（Document Database），以文本方式儲存，資料的儲存架構是以 JSON 格式儲存，如果使用 Node.js 做為後端，強烈建議使用 MongoDB。
本身沒有 Schema，所以在架構上很好調整。
MongoDB與SQL實例的比較圖
![](https://i.imgur.com/sMrUOdC.png)

**NoSQL ( Not Only SQL )**
1. **混用關聯式資料庫和NoSQL資料庫來達成最佳的儲存效果**
EX.用NoSQL資料庫來儲存資料量大的用戶狀態資料，但其他資料仍然使用關聯式資料庫，以善用SQL語法的好處
2. 具有水平擴充能力，只要增加新的伺服器節點，就可以不斷擴充資料庫系統的容量。簡單來說，只要增加新的伺服器設備，就能自動增加資料庫的容量，從管理角度來看，這也可以減少長期維護資料庫的人力
3. **打破Schema欄位架構的限制** : NoSQL資料庫則是改用Key-Value資料模式來解決龐大資料的異動困難。Key-Value模式是將一筆資料的結構簡化到只有一個Key值對應到一個Value值，每一筆資料之間沒有關連性，所以，可以任意切割或調整，也可以分散到不同的伺服器中建立副本
4. 資料遲早會一致 : 但是ACID(Atomicity、Consistency、Isolation、Durability)架構的資料庫擴充不易，所以，NoSQL資料庫大多沒有交易的設計，而是採用了另外一個不同的CAP資料庫理論。
CAP理論有三個關鍵，包括**資料一致性（Consistent）、可用性（Availability）和中斷容忍性（Partition Tolerance）**。理論上無法同時兼顧CAP這三種特性，所以，NoSQL資料庫通常會選擇其中兩種特性來設計，通常是選擇CP或AP


**MongoDB安裝**
伺服器預設資料夾 C:/Program Files/MongoDB/Server/4.2/bin/mongod.cfg
(CMD 下指令 code mongod.cfg 可直接以vscode開啟此檔案)
mongod.cfg 詳細設定
![](https://i.imgur.com/ZuBKusG.png)

若要使用shell指令介面，可直接在cmd下```mongo```指令，若連線成功即可進入shell指令介面
![](https://i.imgur.com/suWPpbw.png)
或是安裝studio 3T，透過圖形化介面連線至MongoDB Server ，選擇上方Shell 指令區域
![](https://i.imgur.com/AazvRVd.png)

**MongoDB基本指令**
```show dbs```: 顯示目前有的database
```use local``` : switch to local database
```show collections``` : show all collections(table in mySQL) in current database
```db``` : show current database
```db.startup_log.find()``` : show startup_log collections data
```db.startup_log.find().size()``` : show startup_log collections data size
```db.users.insert({name:'Jacky',gender:'Male',age:23})``` : 新增一個users資料庫，並新增一筆資料，有三個欄位
```db.users.update()``` : 更新資料(必須抓取唯一ID，且在更新時必須填寫所有欄位的值)

**MongoDB + Express**
* mongoose : 一套給Node.js用的MongoDB ODM。透過mongoose可以用包裝過的，更高階的，更直覺的API語法，以及模擬基於SQL資料庫schema的方式，來操作MongoDB資料庫
* mongoose install : ```npm install mongoose --save```
* 建立連線
* ![](https://i.imgur.com/oeH9HqL.png)
* morgan: 搭配 node 使用的 HTTP 請求記錄器中間層套件。


### 本周心得
這週是學習後端的第一週，老師的主要教學內容主要是MongoDB的環境架設與Angular的搭配。MongoDB是NoSQL的一種，之前就有聽過，但未能親身去安裝過。這次上課後自己又再重新安裝整個MongoDB，除了搭配上上課提到的GUI，我也試著利用命令提示字元直接操作MongoDB內的資料，熟悉基本指令的用法。上課也上了與Express連結，建立一個可讀取老師資料庫的畫面，由於自己再連線部分較為生疏，這次趁著這次機會也再複習了一次，希望下次可以不用看就直接寫出來此段程式。總體而言，這週的課程讓我獲益良多，未來希望能結合前後端製作個人的電商網站。
