$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 件に切り詰める

📌 注意事項

📚 関連チュートリアル

❓ よくある質問

Q更新の $sort とクエリの sort() の違いは?
A更新の $sort は配列要素を並べ替えます。sort() は返されるドキュメントを並べ替えます。
Q$sort と $slice はどう組み合わせますか?
A$push: { $each: [...], $sort: -1, $slice: 10 } — ソートしてから切り詰めます。
Qネストしたフィールドでソートできますか?
Aはい。$sort は { field: 1 } 形式のオブジェクトに対応しています。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%