MongoDB에서 전체 필드에 문자열 접두사 추가하기
MongoDB에서 특정 컬렉션의 모든 문서에 있는 문자열 필드 앞에 공통 문자열을 붙이고 싶은 경우가 있습니다. 예를 들어 이름 필드 앞에 'Mr.' 같은 호칭을 일괄적으로 추가하는 상황이 대표적입니다. 이때 애그리게이션 프레임워크(Aggregation Framework)의 $concat 연산자를 활용하면 간단하게 처리할 수 있습니다.
1. 테스트용 컬렉션 생성
먼저 실습에 사용할 컬렉션과 문서를 만들어 보겠습니다. insertOne() 메서드를 사용해 학생 이름 데이터를 차례로 삽입합니다.
> db.prependDemo.insertOne({"StudentFirstName":"John"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ccf3bcedceb9a92e6aa1955")
}
> db.prependDemo.insertOne({"StudentFirstName":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ccf3bd3dceb9a92e6aa1956")
}
> db.prependDemo.insertOne({"StudentFirstName":"Robert"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ccf3bd8dceb9a92e6aa1957")
}2. 저장된 문서 확인하기
컬렉션에 정상적으로 데이터가 들어갔는지 확인하려면 find() 메서드를 사용합니다. pretty()를 함께 사용하면 결과를 보기 좋게 정렬해서 출력할 수 있습니다.
> db.prependDemo.find().pretty();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5ccf3bcedceb9a92e6aa1955"), "StudentFirstName" : "John" }
{
"_id" : ObjectId("5ccf3bd3dceb9a92e6aa1956"),
"StudentFirstName" : "Chris"
}
{
"_id" : ObjectId("5ccf3bd8dceb9a92e6aa1957"),
"StudentFirstName" : "Robert"
}3. $concat으로 문자열 접두사 붙이기
이제 핵심 단계입니다. aggregate() 파이프라인 안에서 $project와 $concat을 조합하면 모든 문서의 StudentFirstName 필드 앞에 원하는 문자열을 붙일 수 있습니다.
> db.prependDemo.aggregate([{
... $project: {
... "StudentFirstName": {
... $concat: ["Mr.", "$StudentFirstName"]
... }
... }
... }]);$concat 배열의 첫 번째 요소인 "Mr."가 접두사 역할을 하고, 두 번째 요소인 "$StudentFirstName"은 기존 필드 값을 참조합니다. 실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5ccf3bcedceb9a92e6aa1955"), "StudentFirstName" : "Mr.John" }
{ "_id" : ObjectId("5ccf3bd3dceb9a92e6aa1956"), "StudentFirstName" : "Mr.Chris" }
{ "_id" : ObjectId("5ccf3bd8dceb9a92e6aa1957"), "StudentFirstName" : "Mr.Robert" }참고 사항
위 방식은 조회 결과에만 변환된 값이 반영되며, 실제 저장된 데이터는 변경되지 않습니다. 만약 데이터베이스에 영구적으로 반영하고 싶다면 updateMany()와 함께 $concat을 포함한 애그리게이션 파이프라인 업데이트(MongoDB 4.2 이상)를 사용하거나, 결과를 기반으로 별도의 업데이트 작업을 수행해야 합니다. 또한 $concat은 인수 중 하나라도 null이나 누락된 필드가 있으면 전체 결과가 null이 되므로, 데이터에 빈 값이 있을 경우 주의가 필요합니다.