정의
$exists$exists연산자는 필드 값이null인 문서를 포함하여 지정된 필드를 포함하거나 포함하지 않는 문서를 일치시킵니다.참고
MongoDB
$exists은(는) SQL 연산자 에 해당하지exists않습니다. SQL 의 경우exists를$in참조하세요.Atlas Search
exists의 경우 Atlas 문서에서 exist( MongoDB Search 연산자)를 참조하세요.
호환성
다음 환경에서 호스팅되는 배포에 $exists 사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
참고
표현식 이 $exists 연산자를 지원하지 않습니다. 표현식 에서 필드 있는지 확인하려면 $type 집계 연산자 사용하여 필드 에 missing 유형이 있는지 확인할 수 있습니다.
자세한 내용은 $type 존재 확인을 참조하세요.
구문
$exists 표현식을 지정하려면 다음 프로토타입을 사용합니다.
{ field: { $exists: <boolean> } }
<boolean>이 참인 경우 $exists은 필드 값이 null인 문서를 포함해 필드가 포함된 문서와 일치합니다. <boolean>이 거짓인 경우 쿼리는 해당 필드를 포함하지 않은 문서만 반환합니다.
Atlas Search을 사용하여 Atlas에서 데이터 쿼리하기
MongoDB Atlas 에 저장된 데이터의 경우 쿼리를 실행 $search 때 Atlas Search 존재(MongoDB Search 연산자) 연산자 사용할 수 있습니다. $exists $search 다음에 를 실행하는 것은 $search exists( MongoDB Search 연산자) 연산자 사용하여 를 실행 보다 성능이 떨어집니다.
이 연산자 의 Atlas Search 버전에 대해 자세히 학습 Atlas 문서에서 존재( MongoDB Search 연산자) 연산자 참조하세요.
예시
이 페이지의 예시에서는 sample_mflix 샘플 데이터 세트의 데이터를 사용합니다. 이 데이터 세트를 자체 관리형 MongoDB 배포서버에 로드하는 방법에 대한 자세한 내용은 샘플 데이터 세트 로드를 참조하세요. 샘플 데이터베이스를 수정한 경우 이 페이지의 예시를 실행 하려면 데이터베이스를 제거하고 다시 만들어야 할 수 있습니다.
존재 및 같지 않음
다음 예를 고려하십시오.
db.movies.find( { rated: { $exists: true, $nin: [ "R", "PG-13" ] } } ).limit(5)
이 쿼리 5 컬렉션 movies 에서 rated 필드 존재하고 해당 값이 "R" 또는 와 같지 않은 문서를 "PG-13" 선택합니다.
Null Values
sample_mflix 데이터베이스 의 movies 컬렉션 에는 일부 필드는 있고 다른 필드는 누락된 문서가 포함되어 있습니다. 예시 를 들어 rated 필드 11,455 문서에 존재하고 나머지 9,894 문서에는 존재하지 않습니다.
$exists: true
다음 쿼리는 쿼리 조건자 rated: { $exists: true }을(를) 지정합니다:
db.movies.find( { rated: { $exists: true } }, { _id: 0, title: 1, rated: 1 } ).limit( 3 )
결과는 rated 필드 포함된 세 개의 문서로 구성됩니다.
[ { title: 'The Great Train Robbery', rated: 'TV-G' }, { title: 'A Corner in Wheat', rated: 'G' }, { title: 'Traffic in Souls', rated: 'TV-PG' } ]
$exists: false
다음 쿼리는 쿼리 조건자 rated: { $exists: false }을(를) 지정합니다:
db.movies.find( { rated: { $exists: false } }, { _id: 0, title: 1, year: 1 } ).limit( 3 )
결과는 rated 필드 포함하지 않는 세 개의 문서로 구성됩니다.
[ { title: 'Winsor McCay, the Famous Cartoonist of the N.Y. Herald and His Moving Comics', year: 1911 }, { title: 'Gertie the Dinosaur', year: 1914 }, { title: 'In the Land of the Head Hunters', year: 1914 } ]
희소 인덱스를 사용하여 $exists 성능 향상
다음 표에서는 희소 인덱스와 비희소 인덱스를 사용한 $exists 쿼리 성능을 비교합니다.
$exists 쿼리 | 희소 인덱스 사용 | Using a Non-Sparse Index |
|---|---|---|
| 가장 효율적입니다. MongoDB는 정확히 일치시킬 수 있으며 | 인덱스가 없는 쿼리보다 더 효율적이지만 여전히 |
| 인덱스를 사용할 수 없으며 |
|
희소 인덱스가 아닌 필드에 { $exists: true } 을(를) 사용하거나 인덱싱되지 않은 필드에 { $exists: true } 을(를) 사용하는 쿼리는 collection의 모든 문서를 검사합니다. 성능을 향상시키려면 다음 시나리오와 같이 field 에 희소 인덱스를 생성하십시오.
movies컬렉션metacritic필드 일부 문서에는 있고 다른 문서에는 없는 문서가 포함되어 있습니다. 21,349 문서 중 6,964 에는metacritic필드 있고 14,385 에는 없습니다.metacritic필드에 희소 인덱스를 만듭니다.db.movies.createIndex( { metacritic: 1 }, { name: "metacriticSparseIndex", sparse: true } ) 다음 예시에서는
metacritic필드에 값(null 포함)이 있는 문서의 수를 계산하고 희소 인덱스를사용합니다.db.movies.countDocuments( { metacritic: { $exists: true } } ) 이 예시 6964을 반환합니다. 이 작업은
metacritic필드 누락된 문서를 계산하지 않습니다.
팁
field 에 null이 아닌 값이 있는 문서만 필요한 경우 다음을 실시합니다.
$exists: true대신$ne: null을(를) 사용할 수 있습니다.field에는 희소 인덱스이(가) 필요하지 않습니다.
예를 들어, movies collection을 사용하면 다음과 같습니다.
db.movies.countDocuments( { metacritic: { $ne: null } } )
이 예시 6964을 반환합니다. metacritic 값이 누락되었거나 null metacritic 값이 있는 문서는 계산되지 않습니다.