$sort(排序)
最后更新:2026-10-09
$sort(排序)
$sort 按指定字段对管道中的文档排序:1 升序、-1 降序,支持多字段组合排序。排序通常放在管道靠后位置,因为中间阶段可能改变文档顺序;若想借助索引加速排序,应把 $match 前置。对大量文档排序会占用较多内存,超过 100MB 内存限制会被拒绝,可开启 allowDiskUse 用磁盘完成排序。
| 分类 | 核心阶段 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $sort: { <字段1>: <1 或 -1>, <字段2>: <1 或 -1> } }
⚙️ 参数
| 排序键 | 字段名映射为 1(升序)或 -1(降序),多个字段按书写顺序依次比较。 |
|---|
返回值:排序后的文档流
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $sort:分数降序,同名按姓名升序
db.scores.aggregate([
{ $sort: { score: -1, name: 1 } }
])
运行结果:
{ "name": "Alice", "score": 98 }
{ "name": "Bob", "score": 92 }
📌 注意事项
- 多字段排序按字段书写顺序依次比较
- 内存超限报错:排序超过 100MB 需开启 allowDiskUse
- $sort 后接 $limit 可构成 top-N 查询
🏷️ 相关标签
💡 相关案例
📚 相关教程
❓ 常见问题
Q$sort 如何实现多字段排序?
A按字段书写顺序依次比较:先按第一个字段排序,值相等再按第二个字段。
Q$sort 会利用索引吗?
A当排序键与索引匹配且作为首阶段或紧跟 $match 时,可借助索引避免内存排序。
Q$sort 报内存超限怎么办?
A在 aggregate 选项里加 allowDiskUse: true,允许使用磁盘临时文件完成排序。