---
tags: Node.js 直播班 - 2022 春季班
---
# 🏅 Day 7
## model、Mongoose 新增 / 查詢
### Model
延續前一天的每日任務,接下來會建立 Model,以連接資料庫中的 Collection 及 Schema,並使用建立好的 Model 新增、查詢 document
須先在專案中引入 Mongoose 套件、連線本地端資料庫,並建立 Schema(可參考 Day6 每日任務)
建立 Model 寫法如下
```javascript
const roomSchema = new mongoose.Schema({
name: String,
price: {
type: Number,
required: [true, '價格必填']
},
rating: Number
});
// 建立 Model
const Room = mongoose.model('Room', roomSchema);
```
`mongoose.model()` 第一個參數為 Collection 的名稱,第二個參數帶入 Schema
其中需注意第一個參數 Collection 的名稱,Mongoose 會自動視為小寫開頭及改為複數(結尾加 s)
因此 `Room` Model 實際上是連接至名稱為 `rooms` 的 Collection
接著可以使用 Model 新增 document
### Mongoose 新增
新增寫法如下
```javascript
const Room = mongoose.model('Room', roomSchema);
const testRoom = new Room({
name: '總統套房單人房',
price: 2000,
rating: 4.5
});
testRoom.save()
.then(() => {console.log('新增資料成功')})
.catch((error) => {console.log(error)})
```
建立 Model 後,若要使用 Model 新增資料,需先使用 `new` 建立 Room 的實體(instance),一個 Model 的 instance 就是 document
產生一個 document 後就可以使用 `save()` 將其儲存到 rooms Collection 中
新增 document 也可以使用另一種方式`create()`
```javascript
Room.create({
name: '總統套房單人房',
price: 2000,
rating: 4.5
})
```
執行後可以連線至 MongoDB Compass 本地端資料庫 `'mongodb://localhost:27017/test'`(test 可更換為自己建立的資料庫名稱)查看,若新增成功可以看到 rooms collection 中會有剛剛新增的資料
```
_id: ObjectId('...')
name: '總統套房單人房'
price: 2000
rating: 4.5
__v: 0
```
### Mongoose 查詢
Model instance 可以使用 `.find()` 查詢 documents
```javascript
// 查詢所有 documents
Room.find({});
// 帶入篩選條件
Room.find({ name: '總統套房單人房'})
```
### 參考資源
[Mongoose v6.2.10: Models](https://mongoosejs.com/docs/models.html)
[Mongoose v6.2.10: Model](https://mongoosejs.com/docs/api/model.html)
[Mongoose 新增 Model 流程](https://courses.hexschool.com/courses/1670869/lectures/39252173)(章節影片)
### 題目(將答案寫在 HackMD 並提交至回報區)
延續前一天每日任務練習的手搖飲 Schema,建立名稱為 Drink 的 Model,並嘗試新增一筆 document
新增 document 內容如下
```
product: '鮮奶茶',
price: 55,
sugar: '微糖'
```
提交範例
```javascript
const ___ = mongoose.model('___', schema 名稱);
const ___ = new ___({
/* 新增 document 內容 */
});
___.save()
.then(() => {console.log('新增資料成功')})
.catch((error) => {console.log(error)})
// 或另一種方式
___.create({
/* 新增 document 內容 */
})
```
回報流程
---
請同學依照下圖教學觀看解答、回報答案:

回報格式:請在「回報區」貼上連結回報答案 (為了統計人數,請同學依序加上「報數」)
<!-- 解答
const Drink = mongoose.model('Drink', drinkSchema);
const newDrink = new Drink({
product: '鮮奶茶',
price: 55,
sugar: '微糖'
});
newDrink.save()
.then(() => {console.log('新增資料成功')})
.catch((error) => {console.log(error)})
// 或
Drink.create({
product: '鮮奶茶',
price: 55,
sugar: '微糖'
})
-->
回報區
---
| 報數 | 組別 / 名字 | codepen / hackMD / 其他回饋 |
| ---- | -------------------- | -------------------------------------------------------------------- |
| 1 | 第 6 組 / Wendy | [Codepen](https://codepen.io/wendy03/pen/vYpvGLL) |
| 2 | 第 2 組 / Jin | [Codepen](https://codepen.io/Jin-L/pen/QWazNGQ) |
| 3 | 第 2 組 / Vic | [hackMD](https://hackmd.io/4cTXuxk7QPy31sZsNh9wkg) |
| 4 | 第 4 組 / 苡安 | [hackMD](https://hackmd.io/@L7K9-66lSeagS28AP0_GjQ/BkP2gNK45) |
| 5 | 第 3 組 / HedgehogKU | [HackMD](https://hackmd.io/9mS_SKbCS_6KVo8eMnLoSg) |
| 6 | 第 5 組 / HazelWu | [HackMD@Hazel](https://hackmd.io/@hazelwu/nodejs-daily) |
| 7 | 第 8 組 / Hank | [HackMD](https://hackmd.io/@TFOivyvXT-qpG6SieUTfgw/rJAQ5HqNq) |
| 8 | 第 2 組 / Genos | [HackMD](https://hackmd.io/5A8AcAMeSSOA96WvjFH48g?view) |
| 9 | 第 3 組 / Larry | [HackMD](https://hackmd.io/fZ_E6reESxSi8tnk48K3rg) |
| 10 | 第 4 組 / sihle | [HackMD](https://hackmd.io/@bugbug777/Sy65ZL5N9) |
| 11 | 第 3 組 / Hobby | [HackMD](https://hackmd.io/@hobbyling/HkdehNqN9) |
| 12 | 第 14 組|East | [HackMD](https://hackmd.io/883aaVfgRdeGdeH4CiAzGg) |
| 13 | 第 7 組|程翔 | [Codepen](https://codepen.io/xxxiang/pen/JjMwKoR?editors=1010) |
| 14 | kk | [Codepen](https://codepen.io/potatokaka/pen/QWazEQe?editors=0010) |
| 15 | 第13組 / KFC | [Codepen](https://codepen.io/kuan-fu-chen/pen/XWVojZE?editors=1010) |
| 16 | 第 9 組 / 黃士桓 | [HackMD](https://hackmd.io/X405nyqIQ6-Gf70hgBY6sA) |
| 17 | Naiky | [HackMD @Naiky](https://hackmd.io/@UWBC7rrORiKaLSBg226mZg/Hyrcbv54q) |
| 18 | 第 3 組 / hiYifang | [HackMD](https://hackmd.io/@gPeowpvtQX2Om6AmD-s3xw/HyTyStcV5) |
| 19 | 第 3 組 / Justin | [HackMD](https://codepen.io/justin3737/pen/eYybBPa?editors=0010) |
| 20 | 第 16 組 / 皓皓 | [HackMD](https://hackmd.io/@cutecat8110/BkkziWrV9) |
| 21 | 第 6 組 / Ruta | [HackMD](https://codepen.io/rue503/pen/XWVogwM) |
| 22 | 第 4 組 / 小宥 | [HackMD](https://hackmd.io/c2vro8XURjuWcwvN2NwKcQ) |
| 23 | 第 2 組 / Rikkubook | [Codepen](https://codepen.io/rikkubook/pen/RwxEjKx) |
| 24 | 第 2 組 / wendy.li | [HackMD](https://hackmd.io/Gs6DVBSuRTSP_sqthnPmJQ) |
| 25 | 第 9 組 / konstante | [HackMD](https://hackmd.io/kRr4u5FpQkmATS0ftRT-Cg?view) |
| 26 | 第 11 組 / mandy | [HackMD](https://codepen.io/manyu1225/pen/podrwMj?editors=1010) |
|27|第14組/Uniza|[Codepen](https://codepen.io/unizalin/pen/popqprR)|
|28|第 1 組 / Claire|[HackMD](https://hackmd.io/rfBEVzHVQjivIhI_V3RcIA)|
|29| 第 9 組 / Reynold | [Codepen](https://hackmd.io/@dL7AuQEMQ6KpCSRHaYElOA/Hk45_-s4c)
|30| 第 11 組 / Han Lai | [Codepen](https://codepen.io/x94han/pen/XWVoZGv)
|31|第 6 組 / 馨云|[HackMD](https://hackmd.io/@ceLocii_Tk-5B0mgomZ5Xw/HJgdkGs45)|
|32|第 1 組 / Ed Huang|[HackMD](https://hackmd.io/@fcxE16V_Rnia2jW-B_yH2g/S1usa-iN9)|
| 33 | 第 3 組 / Adam Hsu |[HackMD](https://hackmd.io/@S9gD__kVTSiQUupQNn_4FQ/Hko1K5oNc) |
| 34 | 第 5 組 / Nap |[HackMD](https://hackmd.io/@8x8YzkXNSzafUSO3LZTmUw/SyTNvhj49) |
| 35 | 第 8 組 / JackLee |[Codepen](https://codepen.io/yxzzktmb/pen/popqEKr) |
|36 | 第 12 組 / Jimmy|[HackMD](https://hackmd.io/49CMS-CTS_i-A7CY5Or6rA)|
|37 | 第 2 組 / peter|[HackMD](https://hackmd.io/@peterchen1024/By9mBCjE5)|
|38 | 第 8 組 / Jordan Tseng|[HackMD](https://codepen.io/jordan-ttc-design/pen/XWVovJM?editors=0011)|
|39 | 第 2 組 / Joe chang|[HackMD](https://hackmd.io/uaRTw9c0TgOrADyXMmGL0Q?view#418---model%E3%80%81Mongoose-%E6%96%B0%E5%A2%9E--%E6%9F%A5%E8%A9%A2)|
| 40 | 第 15 組 / Tofu | [Codepen](https://codepen.io/Tofutseng/pen/KKZJdNE)
| 41 | 第 1 組 / Jerry Huang | [HackMD](https://hackmd.io/LDwqGCQIR3qRu8ZLhVJ6pA?both)
| 42 | 第 8 組 / Albert | [HackMD](https://hackmd.io/@Albertnotes/Bk9Y_la49)
| 43 | 第 3 組 / 小葉 | [HackMD](https://hackmd.io/@FyKv37KcRSWqAO_e336w8g/HyMqxMaEq)
| 44 | 第 1 組 / snow | [HackMD](https://hackmd.io/@snowsuika/BJ7_e60Vq)
| 45 | 第 15 組 / CHIU | [Codepen](https://codepen.io/awdx8326/pen/jOYJPQY)
| 46 | 第 15 組 /yolala | [HackMD](https://hackmd.io/cgr-DYEvRH2t_BsbKZfJnA?both)
| 47 | nick6303 | [HackMD](https://hackmd.io/RGPpIFVLR6iRLNx_6ctQSw)
| 48 | 第 7 組 / jason06286 | [HackMD](https://hackmd.io/MCSzHztbQT2KmZbF9Wmv2Q)
| 49 | 第 10 組 / 橘子 | [HackMD](https://hackmd.io/N_vf1XboSw60NHPr5EdDRQ?view)
| 50 | 第 5 組 / AmberCYT | [HackMD](https://hackmd.io/@amber871023/HkzRYKzB5/%2FSUSiCKkDTD-fEtIEhy3N7A)
| 51 | 第 1 組 / Phoebe | [HackMD](https://hackmd.io/@Phoebe26/HyZ3Eq7r9)
| 52 | 第 10 組 / Otis | [Codepen](https://codepen.io/humming74/pen/mdpZXyx?editors=0010)
| 53 | 第 15 組 / Castiel | [Codepen](https://codepen.io/everydaycodedog/pen/xxpvyyd)
| 54 | 第 7 組 / TracyChien | [HackMD](https://hackmd.io/@TracyChien/SyRQ27FB5)
| 55 | 第 1 組 / Emily Hsi | [Codepen](https://codepen.io/EmilyHsi/pen/KKQKYaW)
| 56 | 第 10 組 / Butters | [HackMD](https://hackmd.io/LUfrCZKJSomftx2a-lY6dg?view)
| 57 | 第 14 組 / 皮皮 | [HackMD](https://hackmd.io/1OpWpsyTTuGLRpdgeIA-IQ)