MongoDB 쿼리 결과에 정적 값 필드 추가하기
MongoDB에서 find() 쿼리 결과에 모든 문서에 동일하게 들어가는 고정 값(정적 값)을 가진 새로운 필드를 추가하려면 $literal 연산자를 애그리게이션 프레임워크와 함께 사용하면 됩니다. $literal은 전달받은 값을 해석하지 않고 그대로 반환하는 연산자이기 때문에, 필드 이름이나 다른 표현식으로 잘못 처리될 걱정 없이 원하는 상수 값을 안전하게 결과에 포함할 수 있습니다.
1단계: 샘플 컬렉션 생성
먼저 실습에 사용할 컬렉션을 만들고 문서 세 개를 삽입합니다.
> db.fieldWithStaticValue.insertOne({"Name":"Larry","Age":24});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd6554c7924bb85b3f48948")
}
> db.fieldWithStaticValue.insertOne({"Name":"Chris","Age":23});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd655567924bb85b3f48949")
}
> db.fieldWithStaticValue.insertOne({"Name":"David","Age":26});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd655607924bb85b3f4894a")
}2단계: 저장된 문서 확인
find() 메서드를 사용해 컬렉션의 모든 문서를 조회해 보겠습니다.
> db.fieldWithStaticValue.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5cd6554c7924bb85b3f48948"), "Name" : "Larry", "Age" : 24 }
{ "_id" : ObjectId("5cd655567924bb85b3f48949"), "Name" : "Chris", "Age" : 23 }
{ "_id" : ObjectId("5cd655607924bb85b3f4894a"), "Name" : "David", "Age" : 26 }3단계: $literal로 정적 값 필드 추가
이제 애그리게이션의 $project 단계에서 $literal 연산자를 사용하여 각 문서에 값이 100인 'StaticValue'라는 새 필드를 추가해 보겠습니다.
> db.fieldWithStaticValue.aggregate( [
{
$project: { Name: 1,Age:1, "StaticValue": { $literal: 100 } }
}
]);실행 결과는 다음과 같습니다. 모든 문서에 동일한 값 100을 가진 StaticValue 필드가 추가된 것을 확인할 수 있습니다.
{ "_id" : ObjectId("5cd6554c7924bb85b3f48948"), "Name" : "Larry", "Age" : 24, "StaticValue" : 100 }
{ "_id" : ObjectId("5cd655567924bb85b3f48949"), "Name" : "Chris", "Age" : 23, "StaticValue" : 100 }
{ "_id" : ObjectId("5cd655607924bb85b3f4894a"), "Name" : "David", "Age" : 26, "StaticValue" : 100 }참고 사항
$literal은 문자열 값에도 사용할 수 있으며, 이 경우 해당 값이 필드 경로로 해석되지 않습니다. 예를 들어 { $literal: '$Name' }처럼 작성하면 '$Name'이라는 문자열 자체가 그대로 반환됩니다. 또한 $project 단계에서 기존 필드 뒤에 새 필드를 나열하면 출력 결과에서 필드 순서도 원하는 대로 조정할 수 있습니다.