문서 홈 → 애플리케이션 개발 → MongoDB 매뉴얼
$let (애그리게이션)
정의
$let
지정된 식에 사용할 변수를 바인딩하고 식의 결과를 반환합니다.
$let
표현식의 구문은 다음과 같습니다.{ $let: { vars: { <var1>: <expression>, ... }, in: <expression> } } 집계 표현식의 변수에 액세스하려면 변수 이름 앞에 이중 달러 기호 (
$$
) 를 붙이고 따옴표로 묶으십시오. 표현식에 대한 자세한 내용은 표현식 연산자를 참조하세요. 집계 파이프라인에서 변수를 사용하는 방법에 대한 자세한 내용은 집계 표현식의 변수를참조하세요.
행동
$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
collection입니다:
{ _id: 1, price: 10, tax: 0.50, applyDiscount: true } { _id: 2, price: 10, tax: 0.25, applyDiscount: false }
다음 애그리게이션은 $let
$project
파이프라인 단계에서 를 사용하여 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 }