---
# System prepended metadata

title: "\U0001F3C5 Day 17 - 取得資料搭配 sort()、limit()"
tags: [Node.js 直播班 - 2024 春季班]

---

# 🏅 Day 17 - 取得資料搭配 sort()、limit()
Mongoose 的 `sort()`  可使用物件寫法
```
Model.find().sort({ field: 'asc', test: -1 }) 
// field 欄位以升序排列，test 欄位以降序排列
```
，也可只帶入欄位名稱（欄位名稱前加上 `-` 代表降序排列）
```
Model.find().sort('field -test');
// field 欄位以升序排列，test 欄位以降序排列
```

Mongoose 的 `limit()` 可直接帶入數字，如：`Model.find().limit(20)` 代表最多呈現 20 筆資料


### 參考資源

- [Query.prototype.sort()](https://mongoosejs.com/docs/api/query.html#query_Query-sort)
- [Query.prototype.limit()](https://mongoosejs.com/docs/api/query.html#query_Query-limit)
- 課程影音「query - 取得網址參數」

題目
---

在 GET posts 網址列帶入排序及限制筆數的參數
並運用 Express 提供的 `req.query` 取得網址列的參數，將尋找到符合的資料設定排序及呈現指定資料數量

`GET /posts?timeSort=asc&limit=20`

請完整下方程式碼（根據註解補上 `...` 的部分）

routes/posts.js
```javascript=
router.get('/', async function(req, res) {
  // 使用三元運算子判斷是否為 asc (由舊至新)，若是則由舊至新（照建立時間 createdAt 順序）排列，否則由新至舊排列
  const timeSortData = ...
  // 帶入網址列的 limit 參數
  const limitNum = ...
  // 運用上面兩個變數尋找前 20 筆由舊至新的資料
  const posts = await Post.find()...
  res.status(200).json({
    status: 'success',
    data: posts
  });
})
```


## 回報流程

將答案寫在 CodePen 並複製 CodePen 連結貼至底下回報就算完成了喔! 
解答位置請參考下圖（需打開程式碼的部分觀看）

![](https://i.imgur.com/vftL5i0.png)

<!-- 解答：  

```javascript
router.get('/', async function(req, res, next) {
  const timeSortData = req.query.timeSort === 'asc' ? 'createdAt' : '-createdAt';
  const limitNum = req.query.limit;
  const posts = await Post.find().sort(timeSortData).limit(limitNum);
  res.status(200).json({
    status: 'success',
    data: posts
  });
})
```
-->




回報區
---
<!-- 
將答案貼至下方表格內，格式：
| Discord 暱稱 | [CodePen](連結) |
-->

|    Discord    |   CodePen ／ 答案  |
|:-------------:|:-----------------:|
| xxx | [CodePen]() |
| 苡安 | [hackmd](https://hackmd.io/@L7K9-66lSeagS28AP0_GjQ/rkz0aOOZR) |
| Chia Pin | [CodePen](https://codepen.io/joker-cat/pen/LYvaWpa) |
|wei|[hackmd](https://hackmd.io/4sz4K-fNS0i8X2AAZgINEQ?view)|
|ej_chuang|[CodePen](https://codepen.io/EJChuang/pen/MWRxOVp)|
|Lobinda|[CodePen](https://codepen.io/Lobinda/pen/LYvqaOJ)|
|william_hsu|[CodePen](https://codepen.io/william8815/pen/KKYErQz)|
|Tiya|[CodePen](https://codepen.io/Tiya_blank/pen/rNbQPbY)|
|Aida|[CodePen](https://codepen.io/ada23410/pen/PoggPPy?editors=0010)|
|Ciel|[CodePen](https://codepen.io/nycteachen/pen/qBwwqoN)|
|jenny7532|[CodePen](https://codepen.io/wei-chen-wu/pen/eYoogyB)|
|tung030374|[CodePen](https://codepen.io/tung__u/pen/OJGGEqZ?editors=0010)|
|Henry|[hackmd](https://hackmd.io/v7YlldR8QcypAO2wcu1syg)|
|Hank|[CodePen](https://codepen.io/tw1720/pen/OJGqjpR)|
|william威良|[CodePen](https://codepen.io/snowman12320/pen/yLrWPed?editors=1010)|
| 2魚 | [CodePen](https://codepen.io/ijrekmsn-the-sans/pen/QWPXLVr) |
| 瑀君 | [HackMD](https://hackmd.io/_uploads/H1cuwzWfC.png)|
|Mei|[CodePen](https://codepen.io/l_umei/pen/OJGeXLO)|
|Benson|[CodePen](https://codepen.io/nosneb83/pen/bGJPWZa)|
| albertyang3576 |[CodePen](https://codepen.io/albertyang3576/pen/zYXVbxV)|
| runweiting |[CodePen](https://codepen.io/weiting14/pen/dyLxNdO)|
| Fabio20 | [CodePen](https://codepen.io/fabio7621/pen/XWwroGN) |
| zaoannihao | [CodePen](https://codepen.io/ckhwdvrx-the-solid/pen/MWdaNBX)|
|Theodore0602|[Codepen](https://codepen.io/GustavoFringgg/pen/WNBpYOo?editors=0010)