문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

$switch (애그리게이션)

이 페이지의 내용

  • 정의
  • 행동
  • 예제
$switch

버전 3.4에 새로 추가되었습니다.

일련의 대소문자 표현식을 평가합니다. true 으로 평가되는 표현식을 찾으면 $switch 지정된 표현식을 실행하고 제어 흐름을 중단합니다.

$switch 의 구문은 다음과 같습니다:

$switch: {
branches: [
{ case: <expression>, then: <expression> },
{ case: <expression>, then: <expression> },
...
],
default: <expression>
}

branches 배열의 객체에는 case 필드와 then 필드만 포함되어야 합니다.

피연산자
설명
branches

제어 브랜치 문서의 배열입니다. 각 브랜치는 다음과 같은 필드가 있는 문서입니다.

  • case
    boolean 로 해석되는 모든 유효한 표현식일 수 있습니다. 결과가 boolean이 아닌 경우 부울 값으로 강제로 적용됩니다. MongoDB가 표현식을 참 또는 거짓으로 평가하는 방법에 대한 자세한 내용은 여기에서확인할 수 있습니다.
  • then
    유효한 모든 표현식이 될 수 있습니다.

branches 배열에는 브랜치 문서가 하나 이상 포함되어야 합니다.

default

선택 사항입니다. 분기 case 표현식이 true로 평가되지 않는 경우 취할 경로입니다.

선택 사항이지만 default 가 지정되지 않았고 case 가 참으로 평가되지 않으면 $switch 는 오류를 반환합니다.

다양한 case 문은 상호 배타적일 필요가 없습니다. $switchtrue 로 평가되는 첫 번째 분기를 실행합니다. 어느 분기도 참으로 평가되지 않으면 $switchdefault 옵션을 실행합니다.

다음 조건으로 인해 $switch 가 오류와 함께 실패합니다:

  • branches 필드가 누락되었거나 항목이 하나 이상 포함된 배열이 아닙니다.

  • branches 배열의 객체에 case 필드가 포함되어 있지 않습니다.

  • branches 배열의 객체에 then 필드가 포함되어 있지 않습니다.

  • branches 배열의 객체에 case 또는 then이외의 필드가 포함되어 있습니다.

  • default이(가) 지정되지 않았으며 true로 평가되는 case이(가) 없습니다.

예제
결과
{
$switch: {
branches: [
{ case: { $eq: [ 0, 5 ] }, then: "equals" },
{ case: { $gt: [ 0, 5 ] }, then: "greater than" },
{ case: { $lt: [ 0, 5 ] }, then: "less than" }
]
}
}
"less than"
{
$switch: {
branches: [
{ case: { $eq: [ 0, 5 ] }, then: "equals" },
{ case: { $gt: [ 0, 5 ] }, then: "greater than" }
],
default: "Did not match"
}
}
"Did not match"
{
$switch: {
branches: [
{ case: "this is true", then: "first case" },
{ case: false, then: "second case" }
],
default: "Did not match"
}
}
"First case"

grades라는 이름의 컬렉션에 다음 문서가 포함되어 있습니다.

{ "_id" : 1, "name" : "Susan Wilkes", "scores" : [ 87, 86, 78 ] }
{ "_id" : 2, "name" : "Bob Hanna", "scores" : [ 71, 64, 81 ] }
{ "_id" : 3, "name" : "James Torrelio", "scores" : [ 91, 84, 97 ] }

다음 애그리게이션 작업은 $switch 를 사용하여 각 학생의 평균 점수를 기반으로 특정 메시지를 표시합니다.

db.grades.aggregate( [
{
$project:
{
"name" : 1,
"summary" :
{
$switch:
{
branches: [
{
case: { $gte : [ { $avg : "$scores" }, 90 ] },
then: "Doing great!"
},
{
case: { $and : [ { $gte : [ { $avg : "$scores" }, 80 ] },
{ $lt : [ { $avg : "$scores" }, 90 ] } ] },
then: "Doing pretty well."
},
{
case: { $lt : [ { $avg : "$scores" }, 80 ] },
then: "Needs improvement."
}
],
default: "No scores found."
}
}
}
}
] )

이 연산은 다음을 반환합니다:

{ "_id" : 1, "name" : "Susan Wilkes", "summary" : "Doing pretty well." }
{ "_id" : 2, "name" : "Bob Hanna", "summary" : "Needs improvement." }
{ "_id" : 3, "name" : "James Torrelio", "summary" : "Doing great!" }

다음도 참조하세요.

← $sum (애그리게이션)

이 페이지의 내용