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

MongoDB에서 null 값 무시하는 방법 – $ne 연산자 활용 가이드

MongoDB에서 배열 필드나 문서 내부에 포함된 null 값을 제외한 상태로 데이터를 조회해야 할 때가 있습니다. 이럴 때는 집계 파이프라인(aggregate()) 안에서 "$ne": null 조건을 사용하면 간단하게 해결할 수 있습니다.

아래 예제를 통해 null 값을 무시하는 구체적인 방법을 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성

먼저 데모용 컬렉션을 만들고 문서를 하나 삽입합니다. details 배열에는 빈 문자열(""), 일반 문자열, 그리고 null 값이 의도적으로 함께 들어 있어 테스트하기에 적합합니다.

> db.demo722.insertOne(
...    {
...       id:101,
...       details: [
...          { Name:""},
...          { Name: "David"},
...          {Name:null},
...          {Name:"Carol"}
...       ]
...    }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5eab07d543417811278f5889")
}

2. 저장된 문서 확인하기

find() 메서드를 사용하여 컬렉션에 저장된 모든 문서를 조회합니다.

> db.demo722.find();

위 명령을 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5eab07d543417811278f5889"), "id" : 101, "details" : [ { "Name" : "" }, { "Name" : "David" }, { "Name" : null }, { "Name" : "Carol" } ] }

출력 결과를 보면 details 배열 안에 Name 값이 null인 요소가 포함되어 있는 것을 확인할 수 있습니다.

3. $ne 연산자로 null 값 무시하기

다음은 $unwind 단계로 details 배열을 개별 문서로 분리한 뒤, $match 단계에서 "details.Name": { "$ne": null } 조건을 적용하여 null 값을 제외하는 쿼리입니다.

> db.demo722.aggregate([
...    {"$unwind": "$details"},

...    {"$match": { "details.Name" :{ "$ne" : null } } }
... ])

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5eab07d543417811278f5889"), "id" : 101, "details" : { "Name" : "" } }
{ "_id" : ObjectId("5eab07d543417811278f5889"), "id" : 101, "details" : { "Name" : "David" } }
{ "_id" : ObjectId("5eab07d543417811278f5889"), "id" : 101, "details" : { "Name" : "Carol" } }

결과 분석

반환된 세 개의 문서를 보면 Name이 null인 요소는 완전히 걸러지고, 빈 문자열("")과 일반 문자열 값만 출력된 것을 알 수 있습니다. 즉, $ne: null은 값이 null인 배열 요소만 정확히 필터링합니다.

참고 사항

MongoDB에서 { field: null } 조건은 필드 값이 null인 문서와 필드 자체가 존재하지 않는 문서를 모두 매칭합니다. 반대로 $ne: null은 해당 필드가 존재하면서 값이 null이 아닌 문서만 반환하므로, 필드가 아예 없는 문서도 함께 제외됩니다. 이러한 동작 방식을 염두에 두고 조건을 설계하면 더욱 정확한 데이터 조회가 가능합니다.