정의
- $switch
- 일련의 대소문자 표현식을 평가합니다. - 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 문은 상호 배타적일 필요가 없습니다. $switch는 true로 평가되는 첫 번째 분기를 실행합니다. 어느 분기도 참으로 평가되지 않으면 $switch는 default 옵션을 실행합니다.
다음 조건으로 인해 $switch가 오류와 함께 실패합니다:
- branches필드가 누락되었거나 항목이 하나 이상 포함된 배열이 아닙니다.
- branches배열의 객체에- case필드가 포함되어 있지 않습니다.
- branches배열의 객체에- then필드가 포함되어 있지 않습니다.
- branches배열의 객체에- case또는- then이외의 필드가 포함되어 있습니다.
- default이(가) 지정되지 않았으며- true로 평가되는- 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!" }