문서 메뉴

문서 홈애플리케이션 개발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 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 }

다음도 참조하세요.

← $lastN

이 페이지의 내용