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

MongoDB에서 $literal 연산자로 필드 값을 대체하는 방법

MongoDB에서 기존 문서의 특정 값을 다른 값으로 교체하고 싶다면 집계 프레임워크(Aggregate Framework)$literal 연산자를 함께 사용하면 됩니다. 이 방법은 update 쿼리 없이도 조회 결과에서 원하는 값을 일괄적으로 변환해 보여줄 수 있다는 장점이 있습니다.

1. 테스트용 컬렉션 생성하기

먼저 예제로 사용할 컬렉션에 문서를 삽입하겠습니다.

> db.replaceValueDemo.insertOne(
    {
       _id : 100,
       "EmployeeName" : "Chris",
       "EmployeeOtherDetails": {
          "EmployeeDesignation" : "HR",
          "EmployeeAge": 27
       }
    }
);
{ "acknowledged" : true, "insertedId" : 100 }
> db.replaceValueDemo.insertOne(
    {
       _id : 101,
       "EmployeeName" : "David",
       "EmployeeOtherDetails": {
          "EmployeeDesignation" : "Tester",
          "EmployeeAge": 26
       }
    }
);
{ "acknowledged" : true, "insertedId" : 101 }

위 코드는 직원 이름과 직급, 나이 정보를 담은 두 개의 문서를 replaceValueDemo 컬렉션에 추가합니다.

2. find()로 전체 문서 조회하기

find() 메서드를 사용해 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.

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

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

{
    "_id" : 100,
    "EmployeeName" : "Chris",
    "EmployeeOtherDetails" : {
       "EmployeeDesignation" : "HR",
       "EmployeeAge" : 27
    }
}
{
    "_id" : 101,
    "EmployeeName" : "David",
    "EmployeeOtherDetails" : {
       "EmployeeDesignation" : "Tester",
       "EmployeeAge" : 26
    }
}

현재 Chris는 HR, David는 Tester라는 직급을 가지고 있습니다.

3. aggregate와 $literal로 값 대체하기

이제 집계 파이프라인의 $project 단계와 $literal 연산자를 조합하여 직급(EmployeeDesignation) 값을 "Developer"로 대체해 보겠습니다.

> db.replaceValueDemo.aggregate([{
    "$project": {
       "_id": 1,
       "EmployeeOtherDetails": {
          EmployeeAge: 1,
          EmployeeDesignation : { $literal: "Developer" }
       }
    }
}]);

$literal 연산자는 지정된 값을 그대로 고정된 리터럴 값으로 반환하는 역할을 합니다. 따라서 모든 문서의 직급 필드가 동일한 값으로 출력됩니다.

4. 실행 결과 확인

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

{ "_id" : 100, "EmployeeOtherDetails" : { "EmployeeAge" : 27, "EmployeeDesignation" : "Developer" } }
{ "_id" : 101, "EmployeeOtherDetails" : { "EmployeeAge" : 26, "EmployeeDesignation" : "Developer" } }

결과를 보면 두 문서 모두 직급이 "Developer"로 변경되어 조회된 것을 확인할 수 있습니다. 참고로 이 방식은 실제 데이터베이스에 저장된 값을 수정하는 것이 아니라, 조회 결과에서만 값을 치환하여 보여주는 방법입니다. 원본 데이터 자체를 영구적으로 변경하려면 updateMany() 같은 업데이트 연산을 별도로 사용해야 합니다.