$let (ローカル変数)
最終更新:2026-10-09
$let (ローカル変数)
$let は集計式内でローカル変数を定義し、in 式で使います。複雑な部分式の繰り返し評価を避けるために使われます。構文は { $let: { vars: { name: 式 }, in: 式 } } で、変数は $$name で参照します。中間結果を一度計算して再利用する場合に使われ、例えば割引を適用してから税込み価格を計算するケースです。MongoDB 5.0 以降、vars は [{ name: ..., value: ... }] の配列形式も受け付け、$ プレフィックス付きの変数名をサポートします。
| カテゴリ | リテラル・変数・オブジェクト |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $let: { vars: { <variable>: <expression> }, in: <expression> } }
⚙️ パラメータ
| vars | 変数定義。オブジェクト形式、または MongoDB 5.0 以降では配列形式。 |
|---|---|
| in | 変数を使用する式。$$name として参照します。 |
戻り値:in 式の結果
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $let: ローカル変数で割引後の価格を計算
db.orders.aggregate([
{ $project: {
finalPrice: {
$let: {
vars: { base: '$price', discount: { $multiply: ['$price', 0.1] } },
in: { $subtract: ['$$base', '$$discount'] }
}
}
} }
])
出力:
{ '_id': 1, 'finalPrice': 90 }
{ '_id': 2, 'finalPrice': 45 }
📌 注意事項
- 変数のスコープは in 式の中だけ
- 変数は $$ プレフィックスで参照する(例: $$base)
- 配列形式では value にフィールドパス式を指定できる
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Q$let は何に使いますか?
Aローカル変数を定義し、複雑な式を繰り返す代わりに中間結果を再利用します。
Q$let の変数はどう参照しますか?
Ain 式の中で $$name を使います。
Q$let の変数はシステム変数と衝突しますか?
A同名の $let 変数はシステム変数をシャドウするため、名前は慎重に選んでください。