$sort(数组排序,更新)
最后更新:2026-10-09
$sort(数组排序,更新)
$sort 作为更新修饰符,在 $push 后对数组元素排序。`{ $push: { scores: { $each: [85], $sort: -1 } } }` 降序排列。可与 $slice 组合:先排序再截取,实现保留 Top N。仅用于数组更新修饰符场景,与查询排序 sort() 不同。
| 分类 | 更新修饰器 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $push: { <数组字段>: { $each: [ <值> ], $sort: <1 或 -1> } } }
⚙️ 参数
| 数组字段 | 要排序的数组字段名。 |
|---|---|
| 排序方向 | 1 升序,-1 降序。 |
返回值:更新结果文档
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $sort:追加后按降序排序
// 1 升序,-1 降序
db.rankings.updateOne(
{ _id: 1 },
{ $push: { scores: { $each: [85], $sort: -1 } } }
)
// 与 $slice 组合:保留 Top 3
db.rankings.updateOne(
{ _id: 1 },
{ $push: { scores: { $each: [85], $sort: -1, $slice: 3 } } }
)
运行结果:
// scores 追加后降序排列;第二个示例再截断只留前 3 名
📌 注意事项
- 只能作为 $push 的修饰符使用
- 与 $slice 组合可实现 Top N
- 与查询 sort() 无关
🏷️ 相关标签
💡 相关案例
📚 相关教程
❓ 常见问题
Q更新里的 $sort 和查询的 sort() 区别?
A更新 $sort 排序的是数组元素本身;sort() 排序的是查询返回的文档。
Q$sort 和 $slice 怎么组合?
A$push: { $each: [...], $sort: -1, $slice: 10 },先排序再截断。
Q能按嵌套字段排序吗?
A能,$sort 支持 { field: 1 } 对象形式。