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

MongoDB에서 null 값 확인하는 방법 – $type 연산자 완벽 가이드

MongoDB에서 특정 필드의 값이 null인 문서를 조회하려면 $type 연산자를 활용하면 됩니다. MongoDB는 BSON(Binary JSON) 타입 체계를 기반으로 동작하며, 각 데이터 타입에는 고유한 번호와 별칭(alias)이 부여되어 있습니다. 이 중 Null 타입은 번호 10, 별칭은 "null"입니다.

BSON 주요 타입 목록

참고로 MongoDB에서 자주 사용되는 BSON 타입들은 다음과 같습니다.

타입번호별칭(Alias)
Double1"double"
String2"string"
Object3"object"
Array4"array"
Binary data5"binData"
Undefined6"undefined"
ObjectId7"objectId"
Boolean8"bool"
Date9"date"
Null10"null"
Regular Expression11"regex"

null 값 조회 기본 문법

null 타입(번호 10)인 문서를 찾기 위한 기본 문법은 다음과 같습니다.

db.yourCollectionName.find({ "yourFieldName": { $type: 10 } });

위 쿼리는 해당 필드의 값이 정확히 null로 저장된 문서만 반환합니다. 빈 문자열("")이나 필드가 아예 없는 문서는 결과에 포함되지 않는다는 점에 유의하세요.

실습 예제: 컬렉션 생성 및 데이터 삽입

먼저 테스트용 컬렉션을 만들고 여러 형태의 데이터를 삽입해 보겠습니다.

> db.mongoDbEqualDemo.insertOne({"Age":34});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd7e9121a844af18acdffa3")
}
> db.mongoDbEqualDemo.insertOne({"Age":""});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd7e9161a844af18acdffa4")
}
> db.mongoDbEqualDemo.insertOne({"Age":null});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd7e9191a844af18acdffa5")
}
> db.mongoDbEqualDemo.insertOne({"Age":56});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd7e91e1a844af18acdffa6")
}
> db.mongoDbEqualDemo.insertOne({});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd7e9261a844af18acdffa7")
}
> db.mongoDbEqualDemo.insertOne({"Age":null});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd7e92e1a844af18acdffa8")
}

위 예제에서는 숫자(34, 56), 빈 문자열(""), null, 그리고 Age 필드가 존재하지 않는 문서까지 다양한 경우를 포함시켰습니다.

저장된 전체 문서 확인하기

find() 메서드를 사용해 컬렉션의 모든 문서를 조회해 보겠습니다.

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

실행 결과는 다음과 같습니다.

{ "_id" : ObjectId("5cd7e9121a844af18acdffa3"), "Age" : 34 }
{ "_id" : ObjectId("5cd7e9161a844af18acdffa4"), "Age" : "" }
{ "_id" : ObjectId("5cd7e9191a844af18acdffa5"), "Age" : null }
{ "_id" : ObjectId("5cd7e91e1a844af18acdffa6"), "Age" : 56 }
{ "_id" : ObjectId("5cd7e9261a844af18acdffa7") }
{ "_id" : ObjectId("5cd7e92e1a844af18acdffa8"), "Age" : null }

$type: 10으로 null 값만 조회하기

이제 null 값이 저장된 문서만 골라서 조회해 보겠습니다.

> db.mongoDbEqualDemo.find({"Age": { $type: 10 } });

실행 결과는 다음과 같습니다.

{ "_id" : ObjectId("5cd7e9191a844af18acdffa5"), "Age" : null }
{ "_id" : ObjectId("5cd7e92e1a844af18acdffa8"), "Age" : null }

결과를 보면 Age 필드가 null인 두 개의 문서만 정확히 반환된 것을 확인할 수 있습니다. 숫자 값, 빈 문자열, 필드 자체가 없는 문서는 모두 제외됩니다.

정리 및 참고 사항

MongoDB에서 null 관련 조회 시 몇 가지 중요한 점을 기억해 두면 좋습니다.

1. $type: 10 또는 "null" 사용 — 번호 대신 { $type: "null" }처럼 별칭을 사용해도 동일하게 동작합니다.

2. null 조건의 특수성 — 일반적으로 { "field": null } 조건은 값이 null인 문서뿐 아니라 해당 필드가 존재하지 않는 문서까지 함께 반환합니다. 따라서 '진짜 null'만 찾으려면 $type: 10 방식이 더 정확합니다.

3. 필드 존재 여부와 구분 — 값이 null인 것과 필드가 아예 없는 것은 서로 다른 상태이므로, 필요에 따라 $exists 연산자를 함께 활용하는 것이 좋습니다.