정의
$switch일련의 대소문자 표현식을 평가합니다.
true으로 평가되는 표현식을 찾으면$switch지정된 표현식을 실행하고 제어 흐름을 중단합니다.$switch의 구문은 다음과 같습니다:$switch: { branches: [ { case: <expression>, then: <expression> }, { case: <expression>, then: <expression> }, ... ], default: <expression>}branches배열의 객체에는case필드와then필드만 포함되어야 합니다.피연산자설명branchesdefault선택 사항입니다. 분기
case표현식이true로 평가되지 않는 경우 취할 경로입니다.선택 사항이지만
default가 지정되지 않고 브랜치case가 참으로 평가되지 않으면$switch는 오류를 반환합니다.
행동
다양한 case 문은 상호 배타적일 필요가 없습니다. $switch는 true로 평가되는 첫 번째 분기를 실행합니다. 어느 분기도 참으로 평가되지 않으면 $switch는 default 옵션을 실행합니다.
다음 조건으로 인해 $switch가 오류와 함께 실패합니다:
branches필드가 누락되었거나 항목이 하나 이상 포함된 배열이 아닙니다.branches배열의 객체에case필드가 포함되어 있지 않습니다.branches배열의 객체에then필드가 포함되어 있지 않습니다.branches배열의 객체에case또는then이외의 필드가 포함되어 있습니다.default이(가) 지정되지 않았으며true로 평가되는case이(가) 없습니다.
예시 | 결과 |
|---|---|
|
|
|
|
|
|
예시
다음 예시에서는 sample_mflix 샘플 데이터 집합의 movies 컬렉션을 사용합니다. 배포서버에 이 데이터세트를 로드하는 방법은 샘플 데이터세트 로드를 참조하세요.
이 집계 작업은 $switch를 사용하여 각 영화의 평점에 따라 특정 메시지를 표시합니다. $match 단계는 결과를 샘플 데이터 세트에서 가장 긴 영화 3개로 제한합니다.
db.movies.aggregate( [ { $match: { runtime: { $gt: 800 } } }, { $project: { _id: 0, title: 1, summary: { $switch: { branches: [ { case: { $gte: [ "$imdb.rating", 9 ] }, then: "Doing great!" }, { case: { $and: [ { $gte: [ "$imdb.rating", 8 ] }, { $lt: [ "$imdb.rating", 9 ] } ] }, then: "Doing pretty well." }, { case: { $lt: [ "$imdb.rating", 8 ] }, then: "Needs improvement." } ], default: "No rating found." } } } }, { $sort: { title: 1 } }] )[ { title: 'Baseball', summary: 'Doing great!' }, { title: 'Centennial', summary: 'Doing pretty well.' }, { title: 'Taken', summary: 'Needs improvement.' }]