$sortArray(数组内排序)
最后更新:2026-10-09
$sortArray(数组内排序)
$sortArray 对数组内部元素排序,MongoDB 5.2 新增。标量数组直接指定 1(升序)或 -1(降序);对象数组用 { 字段: 1/-1 } 指定排序键,也可用 [ [ '字段', 1 ] ] 数组形式支持多级排序。典型场景包括把评论按时间倒序、把商品按价格升序后再展示。它返回新数组,不修改原数据;sortBy 传空对象会报错。
| 分类 | 数组 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $sortArray: { input: <数组>, sortBy: <排序规则> } }
⚙️ 参数
| input | 要排序的数组。 |
|---|---|
| sortBy | 排序规则:标量数组用 1/-1;对象数组用 { 字段: 1/-1 } 或 [ [ '字段', 1 ] ]。 |
返回值:排序后的新数组
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $sortArray:商品按价格升序
db.orders.aggregate([
{ $project: {
sorted: { $sortArray: { input: '$items', sortBy: { price: 1 } } }
} }
])
运行结果:
{ '_id': 1, 'sorted': [ { 'sku': 'B', 'price': 5 }, { 'sku': 'A', 'price': 9 } ] }
📌 注意事项
- MongoDB 5.2+ 才支持,更低版本需用 $unwind 后 $sort 再 $group 实现
- 对象数组排序键的字段缺失时,该元素排在最后
- sortBy 传空对象会报错;null 元素总是排在最后
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Q$sortArray 支持多字段排序吗?
A支持,用 [ [ '字段1', 1 ], [ '字段2', -1 ] ] 形式。
Q老版本 MongoDB 能用吗?
A5.2 才引入;旧版本可用 $unwind 展开、$sort 排序、$group 收回。
Q字段缺失的元素排哪里?
A排在数组末尾。