--- tags: Node.js 直播班 - 2022 春季班 --- # 🏅 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 方法](https://courses.hexschool.com/courses/1670869/lectures/39252177) 到 [另一種新增方法 create()](https://courses.hexschool.com/courses/1670869/lectures/39252180)(章節影片) ### 題目(將答案寫在 HackMD 並提交至回報區) 延續 Day6 的每日任務,調整手搖飲的 Schema - 加入 createdAt 欄位,並設定為隱藏欄位(不會顯示於前端) - 隱藏 versionKey 欄位 提交範例 ``` const drinkSchema = new mongoose.Schema({ /* 填入 Schema 內容 */ },{ /* 填入 options 內容 */ }); ``` 回報流程 --- 請同學依照下圖教學觀看解答、回報答案: ![](https://i.imgur.com/QtL8zEW.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 }); ``` --> 回報區 --- | 報數 | 組別 / 名字 | codepen / hackMD / 其他回饋 | | ---- | --------------------- | ---------------------------------------------------------------------------- | | 1 | 第 6 組 / Wendy | [HackMD](https://hackmd.io/@0k_MSPdgRPujozP6w_D-bA/B1ZJsYoEq) | | 2 | 第 4 組 / sihle | [HackMD](https://hackmd.io/@bugbug777/SJffjFo45) | | 3 | 第 2 組 / Vic | [HackMD](https://hackmd.io/Szs2j01CQjKJVtAed7Cd1Q) | | 4 | 第 2 組 / Jin | [HackMD](https://hackmd.io/Fg7COovjRXqVwAw0J6GkTA) | | 5 | 第 3 組 / HedgehogKU | [HackMD](https://hackmd.io/4Cw6ndSiTNK5Os3s9Yr_vQ) | | 6 | 第 4 組 / 小宥 | [HackMD](https://hackmd.io/abrwcGYESLG4UCw9GlVCsg) | | 7 | 第 3 組 / Justin | [HackMD](https://hackmd.io/q_HKcyS1RiuyNtH9SISIYw) | | 8 | 第 7 組 / 程翔 | [HackMD](https://hackmd.io/XeTHTzBWSUux6oX51qlNEA) | | 9 | 第 2 組 / Genos | [HackMD](https://hackmd.io/5A8AcAMeSSOA96WvjFH48g) | | 10 | Naiky | [HackMD @Naiky](https://hackmd.io/@UWBC7rrORiKaLSBg226mZg/S1pbO5o4q) | | 11 | 第 8 組 / Hank | [HackMD](https://hackmd.io/@TFOivyvXT-qpG6SieUTfgw/ry2Lp9iV9) | | 12 | 第 3 組 / Adam Hsu | [HackMD](https://hackmd.io/@S9gD__kVTSiQUupQNn_4FQ/ryKvAqsN5) | | 13 | 第 9 組 / 黃士桓 | [HackMD](https://hackmd.io/P04X8iopRF2FW9wZTiUphw) | | 14 | 第 6 組 / Ruta | [HackMD](https://hackmd.io/6d8HKXBqT36oLMcL0_VS5w) | | 15 | 第 3 組 / hiYifang | [HackMD](https://hackmd.io/@gPeowpvtQX2Om6AmD-s3xw/HyTyStcV5) | | 16 | 第 8 組 / JackLee | [HackMD](https://hackmd.io/TH1TXAwfRLCfWoN_SVA1GA?view) | | 17 | 第 5 組 / Nap | [HackMD](https://hackmd.io/@8x8YzkXNSzafUSO3LZTmUw/S11Gc3sV5) | | 18 | 第 11 組 / Han Lai | [codepen](https://codepen.io/x94han/pen/BaJvEMj) | | 19 | 第 1 組 / Claire | [HackMD](https://hackmd.io/GAiFiggiQW63MS0ElSzODA) | | 20 | 第 14 組|East | [HackMD](https://hackmd.io/m4hDAxvSTeCMVtN2KRrBCA) | | 21 | 第 12 組|Jimmy | [HackMD](https://hackmd.io/cNxDZAsgS5KRidAEVsItDQ) | | 22 | 第 2 組|peter | [HackMD](https://hackmd.io/@peterchen1024/ByMcwAs4c) | | 23 | 第 5 組|Hazel | [HackMD@Hazel](https://hackmd.io/@hazelwu/day8) | | 24 | 第 8 組|Jordan Tseng | [HackMD](https://hackmd.io/1n-X32JjQLWdFjmGLOwjGg?view) | | 25 | 第 2 組|Joe Chang | [HackMD](https://hackmd.io/uaRTw9c0TgOrADyXMmGL0Q?view#419---Schema-Options) | | 26 | 第14組/uniza | [Codepen](https://codepen.io/unizalin/pen/RwxvbPN) | | 27 | 第 3 組 / Larry | [HackMD](https://hackmd.io/fFUKsg_dSOe9kW2Q_HaFLw) | | 28 | 第 4 組 / 苡安 | [HackMD](https://hackmd.io/lrsabDC9QiOF4ztjyFwf4A) | | 29 |第 9 組 / konstante |[HackMD](https://hackmd.io/KPbDlSQgQI2Gq61nkkW8Ew) | | 30 |第 3 組 / Hobby |[HackMD](https://hackmd.io/@hobbyling/nodejs/%2FGq3LzULXQR22MtDzhHou7w) | | 31 | 第 15 組 / Tofu | [Codepen](https://codepen.io/Tofutseng/pen/GRyzpPB) | 32 |第 6 組 / 馨云 |[HackMD](https://hackmd.io/Stdo9pj_Qc2ebBap6wFD3g) | | 33 |第 1 組 / Jerry Huang |[Codepen](https://codepen.io/sun31483/pen/XWVOKLN?editors=0010) | | 34 | 第 9 組 / Reynold | [Codepen](https://hackmd.io/@dL7AuQEMQ6KpCSRHaYElOA/Hk45_-s4c) | 35 | 第11 組 / MANDY | [HackMD](https://hackmd.io/flqKd0qoRCK6J01Yfwt3XQ) | 36 | 第 8 組 / Albert | [HackMD](https://hackmd.io/@Albertnotes/BkhKKxTEc) | 37 | 第 3 組 / 小葉 | [HackMD](https://hackmd.io/@FyKv37KcRSWqAO_e336w8g/HyKK7MT4q) | 38 | 第 2 組 / wendy.li | [HackMD](https://hackmd.io/sf48YeLpRTKfe4NmL5KCKg) | 39 | 第13組 / KFC |[HackMD](https://hackmd.io/G9V3mm0SRPmW4oVILHLv_g) | 40 | 第 15 組 / CHIU |[Codepen](https://codepen.io/awdx8326/pen/oNpVjxb?editors=1010) | 41 | 第 2 組 / Rikkubook |[HackMD](https://hackmd.io/BdBIh1XmTfaIH6JwJ5u5-Q?both) | 42 | 第 1 組 / snow |[HackMD](https://hackmd.io/@snowsuika/BJ7_e60Vq) | 43 | 第 1 組 / Ed Haung |[HackMD](https://hackmd.io/1s5Pm57sQK6NhGaUyXRXrA?view) | 44 | 第 15 組 / yolala |[HackMD](https://hackmd.io/RTCoax-iT-WVRo7lKWp80g?both) | 45 | nick6303 | [HackMD](https://hackmd.io/Alp5sfhuTomRwfh0cFwZzg) | 46 | 第 7 組 / jason06286 |[HackMD](https://hackmd.io/to0m6_ybTJmfIc7cUpe-sA) | 47 | 第 10 組 / 橘子 |[HackMD](https://hackmd.io/4Vq5GsODR62Z8X1YJQfsyg) | 48 | 第 5 組 / AmberCYT |[HackMD](https://hackmd.io/@amber871023/HkzRYKzB5/%2FxVdWk6-SR2eMJetRmmwSrg) | 49 | 第 16 組 / 皓皓 |[HackMD](https://hackmd.io/@cutecat8110/HyTluKQrq) | 50 | 第 1 組 / Phoebe |[HackMD](https://hackmd.io/@Phoebe26/HyFSD9mSq) | 51 | 第 10 組 / Otis |[Codepen](https://codepen.io/humming74/pen/rNpEdNG?editors=0010) | 52 | 第 7 組 / TracyChien |[HackMD](https://hackmd.io/@TracyChien/S1sdHEFB9) | 53 | 第 8 組 / Emily Hsi |[Codepen](https://codepen.io/EmilyHsi/pen/zYRYXzj) | 54 | 第 10 組 / Butters |[HackMD](https://hackmd.io/ULH3P-pwTTKq6CSESsr7zw?view) | 55 | 第 14 組 / 皮皮 |[HackMD](https://hackmd.io/PPhUczPOQKOfGByVr_57hQ)