MongoDB는 관계형 데이터베이스와 달리 스키마가 고정되어 있지 않기 때문에, 저장된 데이터의 필드(열) 이름도 언제든지 변경할 수 있습니다. 이때 사용하는 것이 바로 $rename 연산자입니다.
$rename 연산자 기본 문법
컬렉션 내 필드 이름을 변경하려면 다음과 같은 형식으로 쿼리를 작성합니다.
db.yourCollectionName.update({}, {$rename: {'yourOldColumName': 'yourNewColumnName'}}, false, true);여기서 마지막 두 인자인 false와 true는 각각 upsert 옵션과 multi 옵션을 의미합니다. true로 설정해야 컬렉션 내 모든 문서에 대해 이름 변경이 적용됩니다.
예제용 컬렉션 생성하기
실습을 위해 먼저 샘플 문서들이 담긴 컬렉션을 만들어 보겠습니다.
> db.renamingColumnNameDemo.insertOne({"StudentName":"Larry","Age":23});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9ee2c6d628fa4220163b9a")
}
> db.renamingColumnNameDemo.insertOne({"StudentName":"Sam","Age":26});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9ee2d0d628fa4220163b9b")
}
> db.renamingColumnNameDemo.insertOne({"StudentName":"Robert","Age":27});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9ee2dbd628fa4220163b9c")
}현재 문서 조회하기
find() 메서드를 사용해 컬렉션의 모든 문서를 출력해 보겠습니다.
> db.renamingColumnNameDemo.find().pretty();
실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5c9ee2c6d628fa4220163b9a"),
"StudentName" : "Larry",
"Age" : 23
}
{
"_id" : ObjectId("5c9ee2d0d628fa4220163b9b"),
"StudentName" : "Sam",
"Age" : 26
}
{
"_id" : ObjectId("5c9ee2dbd628fa4220163b9c"),
"StudentName" : "Robert",
"Age" : 27
}$rename으로 필드 이름 변경하기
이제 Age 필드를 StudentAge로 변경하는 쿼리를 실행합니다.
> db.renamingColumnNameDemo.update({}, {$rename: {'Age': 'StudentAge'}}, false, true);
WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })결과 메시지를 보면 3개의 문서가 모두 매칭되고, 3개의 문서가 수정되었음을 확인할 수 있습니다.
변경 결과 확인하기
다시 find() 메서드로 문서를 조회하여 Age 필드가 StudentAge로 정상적으로 변경되었는지 확인합니다.
> db.renamingColumnNameDemo.find().pretty();
출력 결과입니다.
{
"_id" : ObjectId("5c9ee2c6d628fa4220163b9a"),
"StudentName" : "Larry",
"StudentAge" : 23
}
{
"_id" : ObjectId("5c9ee2d0d628fa4220163b9b"),
"StudentName" : "Sam",
"StudentAge" : 26
}
{
"_id" : ObjectId("5c9ee2dbd628fa4220163b9c"),
"StudentName" : "Robert",
"StudentAge" : 27
}참고: 최신 MongoDB 버전에서는 updateMany() 권장
MongoDB 4.2 이상 버전에서는 위 예제처럼 update() 메서드에 multi 옵션을 전달하는 방식이 더 이상 권장되지 않습니다. 대신 updateMany()를 사용하면 훨씬 간결하게 동일한 작업을 수행할 수 있습니다.
db.renamingColumnNameDemo.updateMany({}, {$rename: {'Age': 'StudentAge'}});이 방법은 별도의 옵션 설정 없이 자동으로 조건에 일치하는 모든 문서에 변경 사항을 적용하므로, 실무 환경에서는 이 방식을 사용하는 것이 좋습니다.