--- tags: Node.js 直播班 - 2023 春季班 --- # 🏅 Day 9 - Mongoose 修改/刪除 延續前兩天的每日任務,須先建立 Schema、Model 後,再透過 Model 執行修改、刪除 document 等動作 針對 Model 修改、刪除有多個方式(可參考[文件](https://mongoosejs.com/docs/api/model.html)),在此列出其中幾個方式 ### Mongoose 修改 #### findByIdAndUpdate 修改單筆 ID document 寫法為: ```javascript const Room = mongoose.model('Room', roomSchema); // 修改特定 Id 的 document Room.findByIdAndUpdate("621e45063ff3c8af575a7498", { "name": "海景雙人房" }) // id, update ``` 需分別帶入參數 id,以及需修改的欄位 #### updateOne() 修改單筆的特定條件之 document ```javascript const Room = mongoose.model('Room', roomSchema); // 修改特定條件的第一筆 document Room.updateOne( { "name": "海景雙人房" }, { "price": 4500 }) ``` 也可使用 **updateMany()** 修改多筆 documents ### Mongoose 刪除 #### deleteMany() ```javascript // 刪除所有 rooms collection 中的 documents Room.deleteMany({}) // 刪除符合特定條件的多個 documents Room.deleteMany({rating: {$lt: 3}}) ``` #### findByIdAndDelete() ```javascript // 刪除特定 ID 的 documents Room.findByIdAndDelete("621e45063ff3c8af575a7498") // id ``` 帶入參數 ID,為 `findOneAndDelete({_id: id})` 的簡寫 ### 參考資源 - [Mongoose v6.2.10: Model](https://mongoosejs.com/docs/api/model.html) 課程影音 - 「deleteMany() 刪除全部房型」 - 「刪除單筆 findByIdAndDelete()、更新單筆 findByIdAndUpdate()」 ## 題目(將答案寫在 HackMD 並提交至回報區) 延續 Day6 - 7 每日任務,嘗試修改、刪除手搖飲 documents 可下載此[檔案](https://drive.google.com/drive/folders/1oRjCzs3OajeUXVroNO6QS7fNomO1hwZ0?usp=sharing)測試是否可正確更新、刪除單筆資料 1. 尋找一筆 document 並將 `ice` 改為 `去冰`,`sugar` 改為 `半糖` ```javascript ``` 2. 以 ID 尋找一筆 document 並將其刪除 ```javascript ``` 3. 刪除全部 documents ```javascript ``` ## 回報流程 將答案連結貼至底下回報就算完成了喔! 解答位置請參考下圖(需打開程式碼的部分觀看) ![](https://i.imgur.com/vftL5i0.png) <!-- 解答: 1.尋找一筆 document 並將 `ice` 改為 `去冰`,`sugar` 改為 `半糖` Drink.findOneAndUpdate({ name: "鮮奶茶" }, { "ice": "去冰", "sugar": "半糖" }) Drink.findByIdAndUpdate("...", { "ice": "去冰", "sugar": "半糖" }) // 或是 updateOne() 也可以 2. 以 ID 尋找一筆 document 並將其刪除 Drink.findByIdAndDelete("62559f3bef2d96ec6556bd1e") 3. 刪除全部 documents Drink.deleteMany({}) --> 回報區 --- | 報數 | 組別/Discord 名字 | Codepen/HackMD/其他回饋 | |:----:|:-------------------:|:---------------------------------------------------------------------------------------------------------------------------------:| | 1 | 北 10 組 / Benson | [Github Benson - Day 9](https://github.com/ioveasdkre/HexschoolOperation/tree/main/NodejsEnterpriseClass/day40-tasks/day9/app.ts) | | 2 | 北 8 組 / Zhao Chen | [GitHub - Day 9](https://github.com/zhao1995chen/NodejsEnterpriseClass/blob/master/daily-task/day9/server.ts) | | 3 | 北 1 組 / PittWu | [Blog Post - Day 9](https://pitt-wu-blog.vercel.app/docs/day9-mongoose-edit-delete) | | 4 | 中 3 組 / Wendy | [Notion - Day 9](https://jewel-cellar-80e.notion.site/Day-9-Mongoose-8065b32badcd4930a3e4cdfd5f131f8c) | | 5 | 中 4 組 / jimkk159 | [HackMD - Day 9](https://hackmd.io/UZWPJ0UKSjKmeRyOeIcwNQ) | | 6 | 北 5 組 / 圈圈 | [HackMD - Day 9](https://hackmd.io/@j6ccRYgTTEiVcfMfmAELcw/Hy47k4oln) | | 7 | 北 12 組 / Sam Lin | [GitHub - Day 9](https://github.com/samlin1122/hex-school/blob/main/daily-challenges/day9.js) | 8 | 北 1 組 / MayYi | [HackMD - Day 9](https://hackmd.io/Kgpn0_qoTTOpVWPWN_xEVA) | 9 | 北 13 組 / Louisa | [GitHub - Day 9](https://github.com/louisa0416/NodejsEnterpriseClass/blob/master/daily-task/day09/server.js) | | 10 | 北 13 組 / sasha | [HackMD - Day 9](https://hackmd.io/@sashaye/SkslyRUb3) | | 11 | 北5組 / albee|[GitHub - Day 9](https://github.com/albee-chang/hexschool-node-dailytask/blob/main/day9/index.md)| | 12 | 南 1 組 / hiYifang |[HackMD - Day 9](https://hackmd.io/@gPeowpvtQX2Om6AmD-s3xw/HyTyStcV5)| | 13 | 北 16 組 / 啊培培 |[GitHub - Day 9](https://github.com/LABIBI-LG/Courses/tree/main/hexschool/nodeJS/Live_Course/Daily_Tasks/day9)|