sort()(排序)
最后更新:2026-10-09
sort()(排序)
sort()按指定字段对游标结果排序,语法为`db.users.find().sort({ age: 1, name: -1 })`。值1表示升序、-1表示降序,多字段依次生效。排序通常在服务端执行,有索引支撑时性能最好;无索引的排序会在内存中完成,超过100MB内存限制会报错。
| 分类 | 游标 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
db.<集合>.find(<条件>).sort(<排序键>)
⚙️ 参数
| 排序键 | 字段到方向的映射,如{age: 1, name: -1}。 |
|---|
返回值:按排序键排序后的游标(可继续链式调用)。
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// sort:按年龄升序、姓名降序排序并取前3条
const result = db.users.find()
.sort({ age: 1, name: -1 })
.limit(3)
.toArray()
result
运行结果:
[
{ _id: ObjectId('64c8a1b20000000000000001'), name: 'Alice', age: 21 },
{ _id: ObjectId('64c8a1b20000000000000002'), name: 'Bob', age: 25 }
]
📌 注意事项
- 1升序、-1降序,多字段从左到右生效
- 有索引支撑的排序性能最佳
- 无索引排序超过100MB内存限制会报错,可用allowDiskUse缓解
🏷️ 相关标签
💡 相关案例
📚 相关教程
❓ 常见问题
Qsort的1和-1分别代表什么?
A1表示升序(小到大),-1表示降序(大到小),例如{age: -1}按年龄从大到小排。
Qsort怎么按多个字段排序?
A排序键写多个字段即可,如{age: 1, name: -1},先按age再按name排。
Qsort性能不好怎么办?
A给排序字段建复合索引;无索引排序会占用内存,超大结果还可配合allowDiskUse()。