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

MongoDB에서 한 필드가 null일 때 다른 필드를 선택하는 방법 ($ifNull 연산자)

MongoDB에서 두 개의 필드 중 하나가 null일 때 나머지 필드의 값을 선택하고 싶다면, 집계 파이프라인에서 $ifNull 연산자를 사용하면 됩니다. $ifNull은 첫 번째 표현식이 null이거나 필드가 존재하지 않을 경우 대체 값을 반환해 주는 아주 유용한 연산자입니다.

1. 샘플 컬렉션 생성하기

먼저 실습용 컬렉션에 문서를 삽입해 보겠습니다.

> db.demo182.insertOne({"FirstName":"Chris","LastName":null});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e398ea19e4f06af55199802")
}
> db.demo182.insertOne({"FirstName":null,"LastName":"Miller"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e398ead9e4f06af55199803")
}
> db.demo182.insertOne({"FirstName":"John","LastName":"Smith"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e398ebf9e4f06af55199804")
}

위 예제에서는 세 개의 문서를 생성했습니다. 첫 번째 문서는 LastName이 null이고, 두 번째 문서는 FirstName이 null이며, 세 번째 문서는 두 필드 모두 값이 존재합니다.

2. find()로 전체 문서 확인하기

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

> db.demo182.find();

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

{ "_id" : ObjectId("5e398ea19e4f06af55199802"), "FirstName" : "Chris", "LastName" : null }
{ "_id" : ObjectId("5e398ead9e4f06af55199803"), "FirstName" : null, "LastName" : "Miller" }
{ "_id" : ObjectId("5e398ebf9e4f06af55199804"), "FirstName" : "John", "LastName" : "Smith" }

3. $ifNull을 활용한 쿼리 작성하기

이제 한 필드가 null일 때 다른 필드의 값을 선택하는 쿼리를 작성해 보겠습니다. aggregate()와 함께 $project 단계 안에서 $ifNull을 사용합니다.

> db.demo182.aggregate([
...    {
...       $project: {
...          "item": 1,
...          "Result": { "$ifNull": [ "$FirstName", "$LastName" ] }
...       }
...    }
...])

$ifNull은 배열 형태로 인자를 받으며, 첫 번째 요소인 $FirstName이 null이면 두 번째 요소인 $LastName의 값이 대신 반환됩니다.

쿼리 실행 결과

{ "_id" : ObjectId("5e398ea19e4f06af55199802"), "Result" : "Chris" }
{ "_id" : ObjectId("5e398ead9e4f06af55199803"), "Result" : "Miller" }
{ "_id" : ObjectId("5e398ebf9e4f06af55199804"), "Result" : "John" }

결과 분석

  • 첫 번째 문서: FirstName이 "Chris"이므로 그대로 "Chris"가 출력됩니다.
  • 두 번째 문서: FirstName이 null이므로 LastName인 "Miller"가 대체되어 출력됩니다.
  • 세 번째 문서: FirstName이 "John"이므로 "John"이 출력됩니다.

이처럼 $ifNull 연산자를 사용하면 null 값 처리 로직을 간결하게 구현할 수 있습니다. 참고로 $ifNull은 세 번째 이상의 인자도 허용하며, 앞의 값들이 모두 null일 경우 순차적으로 다음 값을 확인한 뒤 마지막 기본값을 반환할 수도 있습니다.