$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' }

📌 注意事項

さらなる実践ケースを近日公開予定。

📚 関連チュートリアル

❓ よくある質問

Qどの分岐にも一致しない場合は?
Adefault を返します。default がないとエラーになるため、常に指定してください。
Q入れ子の $cond より優れていますか?
A分岐が多い場合、$switch はロジックを平坦に保てて読みやすくなります。
Qすべての case が評価されますか?
Aいいえ — 最初の一致で評価が短絡します。
Web-Tutorial.com

Web-Tutorial 技術チーム

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

100%