AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.

$switch (집계 표현식 연산자)

$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이(가) 없습니다.

예시
결과
{ $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"

다음 예시에서는 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.' }]
이 페이지 평가하기

이 페이지의 내용