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

MongoDB 컬렉션에서 필드(열) 이름 변경하기 – $rename 연산자 완벽 가이드

MongoDB는 관계형 데이터베이스와 달리 스키마가 고정되어 있지 않기 때문에, 저장된 데이터의 필드(열) 이름도 언제든지 변경할 수 있습니다. 이때 사용하는 것이 바로 $rename 연산자입니다.

$rename 연산자 기본 문법

컬렉션 내 필드 이름을 변경하려면 다음과 같은 형식으로 쿼리를 작성합니다.

db.yourCollectionName.update({}, {$rename: {'yourOldColumName': 'yourNewColumnName'}}, false, true);

여기서 마지막 두 인자인 falsetrue는 각각 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'}});

이 방법은 별도의 옵션 설정 없이 자동으로 조건에 일치하는 모든 문서에 변경 사항을 적용하므로, 실무 환경에서는 이 방식을 사용하는 것이 좋습니다.