Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 필드 존재 여부 확인하는 방법 – $exists 연산자 활용 가이드

MongoDB에서 필드 존재 여부 확인하는 방법 – $exists 연산자 활용 가이드

MongoDB에서 특정 필드가 문서에 존재하는지 확인하려면 $exists 연산자를 사용하면 됩니다. 이 연산자는 조건으로 지정한 필드가 해당 문서 안에 실제로 존재하는지를 판별하며, 필드의 값이 무엇인지와는 관계없이 '필드 자체의 유무'만을 기준으로 결과를 반환합니다.

개념을 명확히 이해하기 위해 먼저 예제용 컬렉션과 문서를 만들어 보겠습니다.

1단계: 예제 컬렉션 및 문서 생성

아래 쿼리를 실행하면 checkFieldExistsOrNotDemo 컬렉션에 네 개의 문서가 삽입됩니다. 각 문서는 서로 다른 필드 구성을 가지고 있다는 점에 주목하세요.

> db.checkFieldExistsOrNotDemo.insertOne({"StudentName":"Larry"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c92ba4136de59bd9de063a1")
}
> db.checkFieldExistsOrNotDemo.insertOne({"StudentName":"John","StudentAge":21});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c92ba4e36de59bd9de063a2")
}
> db.checkFieldExistsOrNotDemo.insertOne({"StudentName":"Chris","StudentAge":24,"StudentCountryName":"US"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c92ba6536de59bd9de063a3")
}

> db.checkFieldExistsOrNotDemo.insertOne({"StudentName":"Robert","StudentAge":21,"StudentCountryName":"UK","StudentHobby":["Teaching","Photography"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c92ba9d36de59bd9de063a4")
}

첫 번째 문서에는 StudentName 필드만 있고, 두 번째 문서부터 StudentAge가 추가됩니다. 세 번째 문서에는 StudentCountryName이, 그리고 마지막 문서에는 배열 형태의 StudentHobby 필드까지 포함되어 있습니다.

2단계: 전체 문서 조회하기

find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.

> db.checkFieldExistsOrNotDemo.find().pretty();

위 쿼리의 출력 결과는 다음과 같습니다.

{ "_id" : ObjectId("5c92ba4136de59bd9de063a1"), "StudentName" : "Larry" }
{
   "_id" : ObjectId("5c92ba4e36de59bd9de063a2"),
   "StudentName" : "John",
   "StudentAge" : 21
}
{
   "_id" : ObjectId("5c92ba6536de59bd9de063a3"),
   "StudentName" : "Chris",
   "StudentAge" : 24,
   "StudentCountryName" : "US"
}
{
   "_id" : ObjectId("5c92ba9d36de59bd9de063a4"),
   "StudentName" : "Robert",
   "StudentAge" : 21,
   "StudentCountryName" : "UK",
   "StudentHobby" : [
       "Teaching",
       "Photography"
   ]
}

3단계: $exists 연산자로 필드 존재 여부 확인

이제 MongoDB에서 필드의 존재 여부를 확인하는 핵심 쿼리를 살펴보겠습니다.

Case 1 – 필드가 존재하는 경우

컬렉션에 실제로 존재하는 StudentHobby 필드를 대상으로 $exists 조건을 true로 설정하여 조회합니다.

> db.checkFieldExistsOrNotDemo.find({ 'StudentHobby' : { '$exists' : true }}).pretty();

출력 결과는 다음과 같습니다. StudentHobby 필드를 가진 문서만 반환된 것을 확인할 수 있습니다.

{
   "_id" : ObjectId("5c92ba9d36de59bd9de063a4"),
   "StudentName" : "Robert",
   "StudentAge" : 21,
   "StudentCountryName" : "UK",
   "StudentHobby" : [
       "Teaching",
       "Photography"
   ]
}

Case 2 – 필드가 존재하지 않는 경우

반대로 컬렉션에 존재하지 않는 StudentTechnicalSubject 필드를 조건으로 지정해 보겠습니다.

> db.checkFieldExistsOrNotDemo.find({ 'StudentTechnicalSubject' : { '$exists' : true }}).pretty();

해당 필드가 어떤 문서에도 존재하지 않기 때문에 아무런 결과도 반환되지 않습니다.


참고 사항

$exists 값을 false로 설정하면 해당 필드가 없는 문서만 조회할 수 있습니다. MongoDB는 스키마가 유연한 NoSQL 데이터베이스이므로 동일한 컬렉션 내에서도 문서마다 필드 구성이 다를 수 있습니다. 따라서 데이터 정합성 검증, 조건부 집계(aggregation), 인덱스 최적화 등을 진행할 때 $exists 연산자가 매우 유용하게 활용됩니다.