Learn the "why" behind slow queries and how to fix them in our 2-Part Webinar.
Register now >
Docs Menu
Docs Home
/ /

$exists (쿼리 자 연산자)

$exists

$exists 연산자는 필드 값이 null인 문서를 포함하여 지정된 필드를 포함하거나 포함하지 않는 문서를 일치시킵니다.

참고

MongoDB $exists 은(는) SQL 연산자 에 해당하지 exists 않습니다. SQL 의 경우 exists$in 참조하세요.

Atlas Search exists 의 경우 Atlas 문서에서 exist( MongoDB Search 연산자)를 참조하세요.

다음 환경에서 호스팅되는 배포에 $exists 사용할 수 있습니다.

  • MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스

참고

표현식$exists 연산자를 지원하지 않습니다. 표현식 에서 필드 있는지 확인하려면 $type 집계 연산자 사용하여 필드 에 missing 유형이 있는지 확인할 수 있습니다.

자세한 내용은 $type 존재 확인을 참조하세요.

$exists 표현식을 지정하려면 다음 프로토타입을 사용합니다.

{ field: { $exists: <boolean> } }

<boolean>이 참인 경우 $exists은 필드 값이 null인 문서를 포함해 필드가 포함된 문서와 일치합니다. <boolean>이 거짓인 경우 쿼리는 해당 필드를 포함하지 않은 문서만 반환합니다.

MongoDB Atlas 에 저장된 데이터의 경우 쿼리를 실행 $searchAtlas 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" 선택합니다.

sample_mflix 데이터베이스 의 movies 컬렉션 에는 일부 필드는 있고 다른 필드는 누락된 문서가 포함되어 있습니다. 예시 를 들어 rated 필드 11,455 문서에 존재하고 나머지 9,894 문서에는 존재하지 않습니다.

다음 쿼리는 쿼리 조건자 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' }
]

다음 쿼리는 쿼리 조건자 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 쿼리
희소 인덱스 사용
Using a Non-Sparse Index

{ $exists: true }

가장 효율적입니다. MongoDB는 정확히 일치시킬 수 있으며 FETCH이(가) 필요하지 않습니다.

인덱스가 없는 쿼리보다 더 효율적이지만 여전히 FETCH 이(가) 필요합니다.

{ $exists: false }

인덱스를 사용할 수 없으며 COLLSCAN이(가) 필요합니다.

FETCH이(가) 필요합니다.

희소 인덱스가 아닌 필드에 { $exists: true } 을(를) 사용하거나 인덱싱되지 않은 필드에 { $exists: true } 을(를) 사용하는 쿼리는 collection의 모든 문서를 검사합니다. 성능을 향상시키려면 다음 시나리오와 같이 field희소 인덱스를 생성하십시오.

  1. movies 컬렉션 metacritic 필드 일부 문서에는 있고 다른 문서에는 없는 문서가 포함되어 있습니다. 21,349 문서 중 6,964 에는 metacritic 필드 있고 14,385 에는 없습니다.

  2. metacritic 필드에 희소 인덱스를 만듭니다.

    db.movies.createIndex(
    { metacritic: 1 },
    { name: "metacriticSparseIndex", sparse: true }
    )
  3. 다음 예시에서는 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 값이 있는 문서는 계산되지 않습니다.

돌아가기

데이터 유형

이 페이지의 내용