$sort (配列のソート・更新)
最終更新:2026-10-09
$sort (配列のソート・更新)
更新修飾子としての $sort は、$push 後に配列の要素を並べ替えます。`{ $push: { scores: { $each: [85], $sort: -1 } } }` で降順にソートします。$slice と組み合わせると、ソート後に切り詰めて上位 N 件を保持できます。クエリの sort() メソッドとは別物の、配列更新専用の修飾子です。
| カテゴリ | 更新修飾子 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $push: { <array field>: { $each: [ <value> ], $sort: <1 or -1> } } }
⚙️ パラメータ
| 配列フィールド | ソートする配列フィールド。 |
|---|---|
| ソート方向 | 1 は昇順、-1 は降順。 |
戻り値:更新結果
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $sort: push 後に降順でソート
// 1 は昇順、-1 は降順
db.rankings.updateOne(
{ _id: 1 },
{ $push: { scores: { $each: [85], $sort: -1 } } }
)
// $slice と併用: 上位 3 件を保持
db.rankings.updateOne(
{ _id: 1 },
{ $push: { scores: { $each: [85], $sort: -1, $slice: 3 } } }
)
出力:
// 追加後に scores が降順でソートされる。2 つ目のクエリは上位 3 件に切り詰める
📌 注意事項
- $push の修飾子としてのみ動作する
- $slice と組み合わせて上位 N 件のリストを作れる
- クエリの sort() メソッドとは無関係
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
Q更新の $sort とクエリの sort() の違いは?
A更新の $sort は配列要素を並べ替えます。sort() は返されるドキュメントを並べ替えます。
Q$sort と $slice はどう組み合わせますか?
A$push: { $each: [...], $sort: -1, $slice: 10 } — ソートしてから切り詰めます。
Qネストしたフィールドでソートできますか?
Aはい。$sort は { field: 1 } 形式のオブジェクトに対応しています。