# 🏅 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) |