$sortArray (配列内の要素をソート)
最終更新:2026-10-09
$sortArray (配列内の要素をソート)
$sortArray は配列内の要素をソートし、MongoDB 5.2 で新しく追加されました。スカラー配列には 1(昇順)や -1(降順)を指定し、オブジェクトの配列には { field: 1/-1 } や [ [ 'field', 1 ] ] 形式でソートキーを指定します。表示前にコメントを時刻の降順に並べたり、商品を価格の昇順に並べたりするのに使います。元の配列を変更せず新しい配列を返します。空の sortBy オブジェクトはエラーになります。
| カテゴリ | 配列 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $sortArray: { input: <array>, sortBy: <sortSpec> } }
⚙️ パラメータ
| input | 並べ替える配列。 |
|---|---|
| sortBy | ソート指定: スカラー配列では 1/-1、オブジェクト配列では { field: 1/-1 } または [ [ 'field', 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複数フィールドのソートはできますか?
Aはい — [ [ 'field1', 1 ], [ 'field2', -1 ] ] 形式を使います。
Q古い MongoDB でも動きますか?
A5.2 で新設されました。古いバージョンでは $unwind で展開し $sort してから再グループ化します。
Qキーを持たない要素はどこに並びますか?
A配列の末尾に並びます。