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

MongoDB 집계 파이프라인에서 $literal로 값을 문자열 리터럴로 교체하는 방법

MongoDB의 $literal 연산자를 사용하면 집계(aggregation) 작업 중에 특정 필드의 값을 고정된 문자열 리터럴로 교체할 수 있습니다. 일반적으로 집계 표현식에서 문자열은 필드 경로로 해석되지만, $literal을 사용하면 입력한 값 그대로 상수로 처리됩니다.

1. 샘플 컬렉션 생성

먼저 문서가 포함된 컬렉션을 생성해 보겠습니다.

> db.replacevaluedemo.insertOne({"StudentName":"Chris","StudentFavouriteSubject":{"TeacherName":"Bob","SubjectCode":"MySQL111"}});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e0390a3f5e889d7a51994fd")
}
> db.replacevaluedemo.insertOne({"StudentName":"Mike","StudentFavouriteSubject":{"TeacherName":"David","SubjectCode":"3221Java"}});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e0390b8f5e889d7a51994fe")
}

2. 컬렉션의 모든 문서 조회

find() 메서드를 사용하여 컬렉션에 저장된 모든 문서를 확인하는 쿼리는 다음과 같습니다.

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

위 쿼리는 다음과 같은 결과를 출력합니다.

{
   "_id" : ObjectId("5e0390a3f5e889d7a51994fd"),
   "StudentName" : "Chris",
   "StudentFavouriteSubject" : {
      "TeacherName" : "Bob",
      "SubjectCode" : "MySQL111"
   }
}
{
   "_id" : ObjectId("5e0390b8f5e889d7a51994fe"),
   "StudentName" : "Mike",
   "StudentFavouriteSubject" : {
      "TeacherName" : "David",
      "SubjectCode" : "3221Java"
   }
}

3. $literal을 사용해 문자열 리터럴로 값 교체

이제 집계 파이프라인의 $project 단계와 함께 $literal을 사용하여 TeacherName 필드의 값을 문자열 리터럴 "UNKNOWN NAME"으로 교체해 보겠습니다.

> db.replacevaluedemo.aggregate([{
...    "$project": {
...       "_id": 1,
...       "StudentFavouriteSubject": {
...          SubjectCode: 1,
...          TeacherName: { $literal: "UNKNOWN NAME" }
...       }
...    }
... }]).pretty();

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

{
   "_id" : ObjectId("5e0390a3f5e889d7a51994fd"),
   "StudentFavouriteSubject" : {
      "SubjectCode" : "MySQL111",
      "TeacherName" : "UNKNOWN NAME"
   }
}
{
   "_id" : ObjectId("5e0390b8f5e889d7a51994fe"),
   "StudentFavouriteSubject" : {
      "SubjectCode" : "3221Java",
      "TeacherName" : "UNKNOWN NAME"
   }
}

정리

출력 결과를 보면 두 문서 모두 TeacherName 필드의 기존 값(Bob, David)이 사라지고, $literal로 지정한 고정 문자열 "UNKNOWN NAME"으로 대체된 것을 확인할 수 있습니다. 반면 SubjectCode는 원래 값 그대로 유지됩니다. 이처럼 $literal은 집계 과정에서 필드 값을 미리 정의된 상수 값으로 바꾸고 싶을 때 매우 유용하게 활용할 수 있습니다.