$cond (条件式)
最終更新:2026-10-09
$cond (条件式)
$cond は if-then-else の三項ロジックを実装し、集計式で最も基本的な分岐演算子です。{ if, then, else } のオブジェクト形式と [ 条件, true の結果, false の結果 ] の配列形式の 2 つをサポートし、どちらも等価です。代表的な用途は、注文金額からの配送ランクの計算や、ステータスコードからラベルへの変換です。条件は真偽規則に従うため、ブール値以外でも動作します。分岐が多い場合は $switch の方が読みやすくなります。
| カテゴリ | 集合・条件・変換 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $cond: { if: <condition>, then: <result1>, else: <result2> } } or { $cond: [ <condition>, <result1>, <result2> ] }
⚙️ パラメータ
| if/条件 | 分岐を選択する式。真偽で判定されます。 |
|---|---|
| then/結果1 | 条件が真の場合の結果。 |
| else/結果2 | 条件が偽の場合の結果。 |
戻り値:条件が真の場合は result1、それ以外は result2
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $cond: 100 を超える金額は大口注文
db.orders.aggregate([
{ $project: {
level: { $cond: { if: { $gt: ['$amount', 100] }, then: 'big', else: 'small' } }
} }
])
出力:
{ '_id': 1, 'level': 'big' }
{ '_id': 2, 'level': 'small' }
📌 注意事項
- オブジェクト形式と配列形式は等価で、どちらでも使える
- else は必須で省略できない
- 分岐が 2 つより多い場合は $switch の方が読みやすい
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Q条件はブール値でなくてもいいですか?
Aはい — 真偽規則が適用され、0、null、'' は偽になります。
Q2 つの形式の違いは?
Aありません — 意味は同一で、構文だけが異なります。
Q分岐が多い場合は?
A$switch を使います。順に評価され、最初に真になった分岐が採用されます。