# Web 企業運算 - Week 11
M0861101 許家維
### 本週自學清單
* MongoDB 基礎建置
* Angular + MongoDB 使用
* Postman 基礎指令使用
* 本文網址 : https://hackmd.io/Q2Fifz4BS_WcjrmXDYfaBw
* 未來將把文章陸續整理到Google blogger 中
* 期中履歷版網站上傳,加入部分如下
* 照片更換
* 調整成正式履歷格式
* 加入Git版本控制
* https://jacky030hsu.github.io/jacky_resume/
### 上課內容程式碼
app.js 內容

todo.js 內容

router.js 內容

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

**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 詳細設定

若要使用shell指令介面,可直接在cmd下```mongo```指令,若連線成功即可進入shell指令介面

或是安裝studio 3T,透過圖形化介面連線至MongoDB Server ,選擇上方Shell 指令區域

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