---
# System prepended metadata

title: "\U0001F3C5 Day 7"
tags: [Node.js 直播班 - 2022 春季班]

---

---
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 內容 */
})

```

回報流程
---
請同學依照下圖教學觀看解答、回報答案:

![](https://i.imgur.com/QtL8zEW.png)

回報格式：請在「回報區」貼上連結回報答案 (為了統計人數，請同學依序加上「報數」)

<!-- 解答
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)


