MongoDB에서 null 값을 다룰 때는 단순히 조건을 걸어 조회하는 것보다 $ne 연산자(not equal)를 활용하는 것이 효과적입니다. 이 글에서는 예제 컬렉션을 만들고, $ne 연산자를 사용해 특정 필드가 null이 아닌 문서만 조회하는 방법을 단계별로 살펴보겠습니다.
1. 컬렉션 생성 및 문서 삽입
먼저 insertOne() 메서드를 사용해 컬렉션에 문서를 삽입합니다. 두 번째 문서의 StudentSubject 필드에는 의도적으로 null 값을 넣어 두 문서의 차이를 명확하게 했습니다.
> db.queryingNullDemo.insertOne(
... {
... "StudentName":"Larry",
... "StudentDetails":
... {
... "StudentAge":21,
... "StudentSubject":"MongoDB"
... }
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd00bec588d4a6447b2e05f")
}
> db.queryingNullDemo.insertOne(
... {
... "StudentName":"Sam",
... "StudentDetails":
... {
... "StudentAge":23,
... "StudentSubject":null
... }
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd00c00588d4a6447b2e060")
}2. 저장된 전체 문서 확인
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.queryingNullDemo.find().pretty();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{
"_id" : ObjectId("5cd00bec588d4a6447b2e05f"),
"StudentName" : "Larry",
"StudentDetails" : {
"StudentAge" : 21,
"StudentSubject" : "MongoDB"
}
}
{
"_id" : ObjectId("5cd00c00588d4a6447b2e060"),
"StudentName" : "Sam",
"StudentDetails" : {
"StudentAge" : 23,
"StudentSubject" : null
}
}3. $ne 연산자로 null이 아닌 문서 조회하기
$ne는 'not equal(같지 않음)'을 의미하는 비교 연산자입니다. 아래처럼 {$ne: null} 조건을 사용하면 해당 필드가 null이 아닌 문서만 조회할 수 있습니다.
> db.queryingNullDemo.find({'StudentDetails.StudentSubject': {$ne: null}});실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5cd00bec588d4a6447b2e05f"),
"StudentName" : "Larry",
"StudentDetails" : { "StudentAge" : 21, "StudentSubject" : "MongoDB" } }결과를 보면 StudentSubject가 "MongoDB"인 Larry의 문서만 반환되고, 해당 필드가 null인 Sam의 문서는 제외된 것을 확인할 수 있습니다.
참고: 반대로 null 값만 조회하고 싶다면?
필드 값이 null인 문서를 찾으려면 {필드명: null} 조건을 사용하면 됩니다. 단, 이 방식은 필드 자체가 존재하지 않는 문서도 함께 매칭된다는 점에 유의해야 합니다. 실제 BSON 타입의 null만 정확히 조회하려면 {필드명: {$type: 10}} 조건을 사용하는 것이 좋습니다.