---
# System prepended metadata

title: Day 9 - Mongoose 修改／刪除
tags: [2024 Node.js直播班]

---

# Day 9 - Mongoose 修改／刪除
###### 2024 Node.js 每日任務 (此份為我的作答)
### Mongoose 修改

#### findByIdAndUpdate

修改單筆 ID 資料 `Model.findByIdAndUpdate(id, update)`

寫法為：
```javascript
const Order = mongoose.model('orderCollection', orderSchema);

// 修改特定 id 的資料
Order.findByIdAndUpdate('621e45063ff3c8af575a7498', {
  room: '海景雙人房'
}) 
```
> 修改 `id: 621e45063ff3c8af575a7498` 的 `room` 欄位資料為 `海景雙人房`

#### updateOne()
修改特定條件的第一筆資料 `Model.updateOne(filter, update)`
```javascript
const Order = mongoose.model('orderCollection', orderSchema);

// 修改特定條件的第一筆資料
Order.updateOne(
  {
    user: 'Tom'
  }, 
  {
    isPaid: true
  }
) 
```
> 修改 `user` 是 `Tom` 的第一筆資料的 `isPaid` 資料為 `true`

也可使用 **updateMany()** 修改多筆資料


### Mongoose 刪除

#### deleteMany()

```javascript
// 刪除所有 orderCollection 中的資料
Order.deleteMany({})

// 刪除符合特定條件的所有資料
Order.deleteMany({ isPaid: true }) // 刪除所有 isPaid 為 true 的資料
```

#### findByIdAndDelete()
```javascript
// 刪除特定 ID 的資料
Order.findByIdAndDelete('621e45063ff3c8af575a7498')
```
> 刪除 id 為 `621e45063ff3c8af575a7498` 的資料

### 參考資源
- [Mongoose: Model](https://mongoosejs.com/docs/api/model.html)
- 課程影音「Mongoose NPM 教學」

題目
---
延續前一天的題目 Room Model，依照下方題目敘述寫出相關操作指令

1. 刪除所有 roomCollection 的資料

  ```javascript
  Room.deleteMany({});
  ```

2. 新增下方資料
  ```javascript
  Room.insertMany(
  {
    room: '單人房',
    price: 1800,
    max: 2,
    bathroom: false,
    amenities: ['牙刷']
  },
  {
    room: '雙人房',
    price: 2800,
    max: 2,
    bathroom: true,
    amenities: ['洗髮精', '沐浴乳', '牙刷']
  },
  {
    room: '四人房',
    price: 3600,
    max: 4,
    bathroom: true,
    amenities: ['洗髮精', '沐浴乳', '牙刷']
  }
  )
  ```

3. 將單人房（room: '單人房'）的 price 資料調整為 1500（updateOne）
  ```javascript
  Room.updateOne({room: '單人房'},{price:1500})
  ```

4. 將最後一筆資料的 max 改為 6（使用 findByIdAndUpdate 指定最後一筆的 `_id`）
  ```javascript
Room.findByIdAndUpdate('621e45063ff3c8af575a7498',{max:6})
  ```
5. 刪除所有 bathroom 是 true 的資料（deleteMany）
  ```javascript
  Room.deleteMany({bathroom:true});
  ```
6. 刪除第一筆資料（使用 findByIdAndDelete 指定第一筆的 `_id`）
  ```javascript
Room.findByIdAndDelete('621e45063ff3c8af575a7498')
  ```