# 管道阶段与排序分页

URL: https://caijiao.org/mongodb/06-aggregation/03-pipeline
Source: docs/mongodb/06-aggregation/03-pipeline.md
Description: 本章节介绍 MongoDB 聚合管道的阶段设计，并结合排序与分页操作，帮助用户实现高效数据查询。

MongoDB 聚合管道由多个阶段组成，每个阶段对数据进行处理并传递给下一个，实现复杂的查询和转换。

## 管道阶段设计

常见管道阶段包括：

- `$match`：筛选符合条件的文档。
- `$sort`：对文档进行排序。
- `$skip`：跳过指定数量文档，常用于分页。
- `$limit`：限制输出文档数量，结合 `$skip` 实现分页。
- `$project`：调整输出字段。

## 排序与分页示例

假设需要查询按创建时间倒序排序的文章，并实现分页功能：

```js
db.articles.aggregate([
  { $match: { status: "published" } },     // 筛选已发布文章
  { $sort: { createdAt: -1 } },            // 按创建时间倒序排序
  { $skip: 20 },                           // 跳过前 20 条（第 3 页，假设每页 10 条）
  { $limit: 10 },                          // 限制返回 10 条数据
  { $project: { title: 1, createdAt: 1 } } // 只返回标题和创建时间
])
````

## 注意事项

- 排序字段应建立索引，提升 `$sort` 性能。
- 分页时合理设置 `$skip` 和 `$limit`，避免大偏移量影响性能。
- 复杂查询可结合多个管道阶段，灵活处理数据。

---

通过合理设计聚合管道阶段，结合排序和分页，[MongoDB](/mongodb/) 能高效支持各种复杂查询需求。
