Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

$let(集計)

項目一覧

  • 定義
  • 動作
$let

指定された式で使用する変数をバインドし、式の結果を返します。

$let式の構文は次のとおりです。

{
$let:
{
vars: { <var1>: <expression>, ... },
in: <expression>
}
}
フィールド
仕様
vars

in 式でアクセス可能な変数の割り当てブロックです。変数を割り当てるには、変数名に文字列を指定し、値に有効な式を割り当てます。

変数の割り当ては、in 式の外部では意味がなく、vars ブロック自体でも意味を持ちません。

in
評価するです。

集計式内の変数にアクセスするには、変数名の前に二重ドル記号($$)を付けて引用符で囲みます。式の詳細については、「式演算子」を参照してください。集計パイプラインでの変数の使用については、「集計式の変数」を参照してください。

$letは、システム変数を含む、式ブロック外で定義された変数にアクセスできます。

vars ブロック内の外部定義された変数の値を変更すると、新しい値は in 式でのみ有効になります。in 式の外部では、変数は以前の値を保持します。

vars 割り当てブロックでは、割り当ての順序は重要ではなく、変数割り当ては in 式の中でのみ意味を持ちます。そのため、vars 割り当てブロック内で変数の値にアクセスすると、同じ vars ブロック内ではなく vars ブロックの外部で定義された変数の値が参照されます。

たとえば、次の$let式について考えてみます。

{
$let:
{
vars: { low: 1, high: "$$low" },
in: { $gt: [ "$$low", "$$high" ] }
}
}

vars割り当てブロックでは、 "$$low"は、同じvarsブロックで定義された変数ではなく、外部定義された変数lowの値を参照します。 この$let式ブロックの外部でlowが定義されていない場合、式は無効になります。

sales コレクションには、次のドキュメントがあります。

{ _id: 1, price: 10, tax: 0.50, applyDiscount: true }
{ _id: 2, price: 10, tax: 0.25, applyDiscount: false }

次の集計では、$project パイプライン ステージで $let を使用して、各ドキュメントの finalTotal を計算して返します。

db.sales.aggregate( [
{
$project: {
finalTotal: {
$let: {
vars: {
total: { $add: [ '$price', '$tax' ] },
discounted: { $cond: { if: '$applyDiscount', then: 0.9, else: 1 } }
},
in: { $multiply: [ "$$total", "$$discounted" ] }
}
}
}
}
] )

この集計は、次の結果を返します。

{ "_id" : 1, "finalTotal" : 9.450000000000001 }
{ "_id" : 2, "finalTotal" : 10.25 }

Tip

以下も参照してください。

戻る

$lastN

項目一覧