---
# System prepended metadata

title: "\U0001F3C5 Day 8 - Schema 補充"
tags: [Node.js 直播班 - 2023 春季班]

---

---
tags: Node.js 直播班 - 2023 春季班
---

# 🏅 Day 8 - Schema 補充

### Schema Options

建立 Schema 時，Mongoose 也有提供一些可調整的設定
```
new mongoose.Schema({..}, options);
```
在 `Schema()` 中第一個參數放 Schema，第二個參數可以調整設定
可以參考[文件說明](https://mongoosejs.com/docs/guide.html#options)查看可調整的 options

#### versionKey

新增 document 時，預設都會在 document 中加上 `__v: 0`，若不需要加上此設定的話，可以設定 `versionKey: false` 將 versionKey 移除
```javascript
new mongoose.Schema({..}, { versionKey: false });
```
#### collection
Mongoose 預設會將 model 連接的 collection 的名稱轉為全小寫，並以複數呈現，例如
```javascript
const User = mongoose.model('User', userSchema);
```
`'User'` 會被視為 **users**，若是需要不同的 collection 名稱，可以透過 `{ collection: '...' })` 更改

```javascript
new mongoose.Schema({..}, { collection: 'data' });
```
上方設定會將 collection 名稱改為 `data`，若是 `mongoose.model('Test', Schema);` 設定不同的 collection 名稱，仍然會以 `{ collection: 'data' }` 為主


#### timestamps

可以透過 `{ timestamps: true }` 為每筆新增的 document 加上 `createdAt` 和 `updatedAt` 欄位
也可以透過 `{ timestamps: { createdAt: 'created_at' }, { updatedAt: 'updated_at' } }` 自定義 `createdAt` 和 `updatedAt` 欄位

因設定 timestamps 預設會同時加入 `createdAt` 和 `updatedAt`，若只想加入其中一個欄位，則可以將欄位加在 Schema 中
```javascript
new mongoose.Schema({
  ...
  createdAt: {
   type: Date, 
   default: Date.now
 }
});
```
若不希望在前端顯示資料建立時間也可以加入 `select: false` 設定
```javascript=
new mongoose.Schema({
 ...
 createdAt: {
   type: Date, 
   default: Date.now,
   select: false
 }
});
```

### 參考資源

- [Mongoose v6.2.10: Schemas](https://mongoosejs.com/docs/guide.html#options)
- [Mongoose v6.2.10: SchemaTypes](https://mongoosejs.com/docs/schematypes.html)
- 課程章節「移除欄位 __v 方法」到 「另一種新增方法 create()」

### 題目（將答案寫在 HackMD 並提交至回報區）

延續 Day6 的每日任務，調整手搖飲的 Schema 
- 加入 createdAt 欄位，並設定為隱藏欄位（不會顯示於前端）
- 隱藏 versionKey 欄位

提交範例
```javascript=
const drinkSchema = new mongoose.Schema({  
  /* 填入 Schema 內容 */

},{
  /* 填入 options 內容 */
});
```


## 回報流程

將答案寫在 CodePen 並複製 CodePen 連結貼至底下回報就算完成了喔! 
解答位置請參考下圖（需打開程式碼的部分觀看）

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

<!-- 解答：  

```javascript
const drinkSchema = new mongoose.Schema({  
  product: {
    type: String,
    required: [true, '產品名稱未填寫']
  },
  price: {
    type: Number,
    required: [true, '價錢未填寫'] 
  },
  ice: {
    type: String,
    default: "正常冰"
  },
  sugar: {
    type: String,
    default: "全糖"
  },
  toppings: [{type: String}],
  /* 加入 createdAt */
  createdAt: {
    type: Date, 
    default: Date.now,
    select: false
  }
},{
  versionKey: false
});
```
-->



回報區
---

| 報數 | 組別／Discord 名字  |                                                     Codepen／HackMD／其他回饋                                                     |
|:----:|:-------------------:|:---------------------------------------------------------------------------------------------------------------------------------:|
|  1   |  北 10 組 / Benson  | [Github Benson - Day 8](https://github.com/ioveasdkre/HexschoolOperation/tree/main/NodejsEnterpriseClass/day40-tasks/day8/app.ts) |
|  2   |  北 1 組 / PittWu   |                               [Blog Post - Day 8](https://pitt-wu-blog.vercel.app/docs/day8-schema)                               |
|  3   | 北 8 組 / Zhao Chen |           [GitHub - Day 8](https://github.com/zhao1995chen/NodejsEnterpriseClass/blob/master/daily-task/day8/server.ts)           |
|  4   | 北 1 組 / MayY1 |           [HackMD - Day 8](https://hackmd.io/E_IzGRCzQHeDK1xywqqSJA)           |
|  5   | 中 3 組 / Wendy | [Notion - Day 8](https://jewel-cellar-80e.notion.site/Day-8-Schema-45a9c41f215a4428ae3cd82214d60c72)           |
|  6   | 中 4 組 / jimkk159 |           [codepen - Day 8](https://codepen.io/jimkk159/pen/BaOGWXx)           |
|  7   | 北 5 組 / 圈圈 |           [codepen - Day 8](https://codepen.io/wjejfczn-the-bold/pen/abaPVdw?editors=0010)           |
|  8  |  北 12 組 / Sam Lin  | [GitHub - Day 8](https://github.com/samlin1122/hex-school/blob/main/daily-challenges/day8.js)
|  9  | 北 13 組 / Louisa  | [GitHub - Day 8](https://github.com/louisa0416/NodejsEnterpriseClass/tree/master/daily-task/day08) |
|  10  | 北 13 組 / sasha  | [codepen - Day 8](https://codepen.io/sasay/pen/qBMzwmR) |
|11|北5組/ albee|[GitHub- Day 8](https://github.com/albee-chang/hexschool-node-dailytask/blob/main/day8/app.js)|
|12| 南 1 組 / hiYifang |[CodePen - Day 8](https://codepen.io/hiYifang/pen/qBpLqWG)|
|13| 北 16 組 / 啊培培 |[GitHub - Day 8](https://github.com/LABIBI-LG/Courses/blob/main/hexschool/nodeJS/Live_Course/Daily_Tasks/day8/main.js)|
