# 🏅 Day 8 - Mongoose 新增/查詢 ### Mongoose 新增 新增資料有兩種方式: 1. 建立實體、`save()` 儲存資料 範例語法: ```javascript= // 1. 建立 Model const Order = mongoose.model('orderCollection', orderSchema); // 2. 使用 new 建立實體(instance) const instanceOrder = new Order({ user: 'Tom', userTel: 0912345678, room: '單人房', isPaid: false }); // 3. 使用 save() 儲存資料 instanceOrder.save() .then(() => {console.log('新增資料成功')}) .catch((error) => {console.log(error)}) ``` 2. 使用 `create()` 範例語法: ```javascript= // 1. 建立 Model const Order = mongoose.model('orderCollection', orderSchema); // 2. create() 新增資料 Order.create({ user: 'Tom', userTel: 0912345678, room: '單人房', isPaid: false }) ``` 執行後可以連線至 MongoDB Compass 本地端資料庫 `'mongodb://localhost:27017/test'`(test 可更換為自己建立的資料庫名稱)查看,若新增成功可以看到 `orderCollection` 中會有剛剛新增的資料 ``` _id: ObjectId('...') user: 'Tom', userTel: 0912345678, room: '單人房', isPaid: false __v: 0 ``` ### Mongoose 查詢 使用 `.find()` 查詢資料 ```javascript // 查詢所有資料 Order.find({}); // 帶入篩選條件 Order.find({ user: 'Tom' }) // 查詢所有 user 是 Tom 的資料 ``` ### 參考資源 - [Mongoose: Models](https://mongoosejs.com/docs/models.html) - [Mongoose: Model](https://mongoosejs.com/docs/api/model.html) - 課程影音「Mongoose NPM 教學」 題目 --- 1. 延續 Day6 的題目房間 Schema(roomSchema),建立一個名稱為 Room 的 Model 並新增一筆資料至 roomCollection 資料內容: ``` room: '單人房', price: 1800, max: 2, bathroom: true, amenities: ['洗髮精', '沐浴乳', '牙刷'] ``` 調整下方 `...` 的部分(下方為兩種方式,實際撰寫擇一即可): ```javascript= const ... = mongoose.model('...', ...); // 第一種方式:建立實例,使用 save() 儲存資料 const instanceRoom = new ...({ /* 新增 document 內容 */ ... }); instanceRoom....() .then(() => {console.log('新增資料成功')}) .catch((error) => {console.log(error)}) // 第二種方式:使用 create() 新增 ....create({ /* 新增 document 內容 */ ... }) ``` 2. 查詢所有 bathroom 是 true 的資料 ## 回報流程 將答案寫在 CodePen 並複製 CodePen 連結貼至底下回報就算完成了喔! 解答位置請參考下圖(需打開程式碼的部分觀看) ![](https://i.imgur.com/vftL5i0.png) <!-- 解答: 1. ```javascript= const Room = mongoose.model('roomCollection', roomSchema); // 第一種方式:建立實例,使用 save() 儲存資料 const instanceRoom = new Room({ room: '單人房', price: 1800, max: 2, bathroom: true, amenities: ['洗髮精', '沐浴乳', '牙刷'] }); instanceRoom.save() .then(() => {console.log('新增資料成功')}) .catch((error) => {console.log(error)}) // 第二種方式:使用 create() 新增 Room.create({ room: '單人房', price: 1800, max: 2, bathroom: true, amenities: ['洗髮精', '沐浴乳', '牙刷'] }) ``` 2. Room.find({ bathroom: true }) --> 回報區 --- <!-- 將答案貼至下方表格內,格式: | Discord 暱稱 | [CodePen](連結) | --> | Discord | CodePen / 答案 | |:-------------:|:-----------------:| | xxx | [CodePen]() | | Lobinda | [CodePen](https://codepen.io/Lobinda/pen/wvZXxoE) | | 群嘉 | [CodePen](https://codepen.io/efzdamnp-the-lessful/pen/QWPBBQz?editors=0010)| | Fabio20 | [CodePen](https://codepen.io/fabio7621/pen/gOyjjyj?editors=0010) | | Tiya | [CodePen](https://codepen.io/Tiya_blank/pen/JjVZaWv) | | Hank | [CodePen](https://codepen.io/tw1720/pen/XWQBBZJ) | | 苡安 | [hackmd](https://hackmd.io/@L7K9-66lSeagS28AP0_GjQ/BJflrNqgC) | | Chia Pin | [CodePen](https://codepen.io/joker-cat/pen/bGJjmKR) | | shuantt|[CodePen](https://codepen.io/th-tseng/pen/ExJpOLP)| | wei|[CodePen](https://codepen.io/Wei-the-sasster/pen/RwOBqEQ?editors=0010)| | jenny7532 |[CodePen](https://codepen.io/wei-chen-wu/pen/wvZxQRQ)| | YC | [CodePen](https://codepen.io/YCLu/pen/XWQEzKp) | | ej_chuang | [CodePen](https://codepen.io/EJChuang/pen/gOyjyOd) | |cho|[CodePen](https://codepen.io/cho195/pen/poBZmJP)| |mei|[CodePen](https://codepen.io/l_umei/pen/gOyjJQL)| | Theodore | [CodePen](https://codepen.io/GustavoFringgg/pen/gOyjJZL) | | tung030374 | [CodePen](https://codepen.io/tung__u/pen/yLrqmja?editors=1010) | | Jean | [HackMD](https://hackmd.io/@fKsG-9CWQ5OgoOrpTNv2NQ/HyFq_Pjg0) | | Aida | [CodePen](https://codepen.io/ada23410/pen/jORvMWg?editors=0010) | | Benson | [CodePen](https://codepen.io/nosneb83/pen/OJGoWvQ) | | 羽 | [CodePen](https://codepen.io/lingling-Syu/pen/MWRqoEx?editors=0010) | | zaoannihao | [CodePen](https://codepen.io/ckhwdvrx-the-solid/pen/RwOYgzx) | | Otis | [CodePen](https://codepen.io/humming74/pen/QWPVYOd?editors=1010) | | 2魚 | [CodePen](https://codepen.io/ijrekmsn-the-sans/pen/JjVazWj) | | blp100x | [CodePen](https://codepen.io/blp100/pen/BaEOgBW) | | william_hsu | [CodePen](https://codepen.io/william8815/pen/zYXmGPj) | | runweiting | [CodePen](https://codepen.io/weiting14/pen/zYXmwWj) | Henry | [CodePen](https://codepen.io/hekman1122/pen/wvZYxKg?editors=0010) | | ellallu0903 | [CodePen](https://codepen.io/ellallu0903/pen/ZEZmEWo) | | Thomas | [CodePen](https://codepen.io/ThomasYeh/pen/wvZQzex) | | william | [CodePen](https://codepen.io/snowman12320/pen/KKYrrQZ?editors=1011) | | yoshidc | [CodePen](https://codepen.io/yoshiyyc/pen/KKYrrBQ) | | Ciel | [CodePen](https://codepen.io/nycteachen/pen/poBQYQV) | | 瑀君 | [CodePen](https://codepen.io/yennnnn/pen/ZEZVLRo) | | albertyang3576 | [CodePen](https://codepen.io/albertyang3576/pen/abxxmjX?editors=0010) | | william威良 | [CodePen](https://codepen.io/snowman12320/pen/poBmWbL) |