MongoDB에서 특정 필드의 값이 null인 문서를 조회하려면 $type 연산자를 활용하면 됩니다. MongoDB는 BSON(Binary JSON) 타입 체계를 기반으로 동작하며, 각 데이터 타입에는 고유한 번호와 별칭(alias)이 부여되어 있습니다. 이 중 Null 타입은 번호 10, 별칭은 "null"입니다.
BSON 주요 타입 목록
참고로 MongoDB에서 자주 사용되는 BSON 타입들은 다음과 같습니다.
| 타입 | 번호 | 별칭(Alias) |
|---|---|---|
| Double | 1 | "double" |
| String | 2 | "string" |
| Object | 3 | "object" |
| Array | 4 | "array" |
| Binary data | 5 | "binData" |
| Undefined | 6 | "undefined" |
| ObjectId | 7 | "objectId" |
| Boolean | 8 | "bool" |
| Date | 9 | "date" |
| Null | 10 | "null" |
| Regular Expression | 11 | "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 연산자를 함께 활용하는 것이 좋습니다.