$switch (多分岐の条件式)
最終更新:2026-10-09
$switch (多分岐の条件式)
$switch は複数の case 分岐を順に評価し、最初に真になった case の then 結果を返します。プログラミング言語の switch 文と同じような動きです。どの分岐にも一致しないときは default を返し、default を省略して一致しない場合はエラーになります。代表的な用途は、注文ステータスコードからラベルへの変換や、スコアをランクに分けることです。各 case は真偽規則に従います。入れ子の $cond と比べ、$switch は読みやすく、分岐数を制限なく書けます。
| カテゴリ | 集合・条件・変換 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $switch: { branches: [ { case: <condition>, then: <result> }, ... ], default: <default> } }
⚙️ パラメータ
| branches | 分岐の配列。各項目は case 条件と then 結果を持ちます。 |
|---|---|
| default | どのケースにもマッチしない場合に返される任意の値。 |
戻り値:最初に真となるケースの then、いずれもマッチしない場合は default
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $switch: 注文を金額でランク分け
db.orders.aggregate([
{ $project: {
tier: { $switch: { branches: [
{ case: { $gte: ['$amount', 1000] }, then: 'gold' },
{ case: { $gte: ['$amount', 100] }, then: 'silver' }
], default: 'bronze' } }
} }
])
出力:
{ '_id': 1, 'tier': 'silver' }
{ '_id': 2, 'tier': 'bronze' }
📌 注意事項
- 分岐は順に評価され、最初に真になったところで止まる
- 一致なしで default がないとエラーになる。本番では必ず default を用意する
- case は真偽規則に従うので、ブール値以外の式でも問題ない
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Qどの分岐にも一致しない場合は?
Adefault を返します。default がないとエラーになるため、常に指定してください。
Q入れ子の $cond より優れていますか?
A分岐が多い場合、$switch はロジックを平坦に保てて読みやすくなります。
Qすべての case が評価されますか?
Aいいえ — 最初の一致で評価が短絡します。