$sort (ソート)
最終更新:2026-10-09
$sort (ソート)
$sort は、指定したフィールドでパイプラインのドキュメントを並べ替えます: 1 が昇順、-1 が降順で、複数フィールドのソートに対応します。途中のステージが順序を変える可能性があるため、最後の方に置きましょう。インデックスを使ってソートするには $match を先頭に置きます。大規模なソートはデフォルトの 100MB メモリ上限を超えると、allowDiskUse を有効にしない限り失敗します。
| カテゴリ | コアステージ |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $sort: { <field1>: <1 or -1>, <field2>: <1 or -1> } }
⚙️ パラメータ
| ソートキー | フィールド名を 1(昇順)または -1(降順)にマッピングします。複数フィールドは記述順に比較します。 |
|---|
戻り値:並べ替えられたドキュメントストリーム
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $sort: スコアの高い順、同点なら名前の昇順
db.scores.aggregate([
{ $sort: { score: -1, name: 1 } }
])
出力:
{ "name": "Alice", "score": 98 }
{ "name": "Bob", "score": 92 }
📌 注意事項
- 複数フィールドのソートは書いた順に比較する
- 100MB を超えるソートは allowDiskUse を有効にしないと失敗する
- $sort の後に $limit を置いて上位 N 件のクエリを作る
🏷️ 関連タグ
💡 関連ケース
高度な集計パイプライン:複雑な式と変換
集計パイプライン入門:aggregateメソッドと基本ステージ
$facet + $bucket + テキスト/地理空間検索
$lookupと複数コレクションの関連付け
📚 関連チュートリアル
❓ よくある質問
Q$sort は複数フィールドをどう扱いますか?
A書いた順に比較します。最初のフィールドで比較し、値が同じ場合に次のフィールドで比較します。
Q$sort はインデックスを使えますか?
Aソートキーがインデックスと一致し、ステージが先頭または $match の直後にある場合、メモリ内ソートを回避できます。
Q$sort がメモリ上限に達したら?
Aaggregate オプションに allowDiskUse: true を渡すとディスクに退避できます。