리네임 컬렉션
정의
renameCollection
기존 컬렉션의 이름을 변경합니다. 완전한 네임스페이스(
<database>.<collection>
) 형태로 컬렉션 이름을renameCollection
에 지정합니다.팁
mongosh
에서는 이 명령을renameCollection()
헬퍼 메서드를 통해서도 실행할 수 있습니다.헬퍼 메서드는
mongosh
사용자에게 편리하지만 데이터베이스 명령과 동일한 수준의 정보를 반환하지 못할 수 있습니다. 편의가 필요하지 않거나 추가 리턴 필드가 필요한 경우 데이터베이스 명령을 사용합니다.관리 데이터베이스에 대해
renameCollection
명령을 실행합니다.
호환성
이 명령은 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
참고
이 명령은 모든 MongoDB Atlas 클러스터에서 지원됩니다. 모든 명령에 대한 Atlas 지원에 대한 자세한 내용은 지원되지 않는 명령을 참조하세요.
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
명령은 다음과 같은 구문을 가집니다:
db.runCommand( { renameCollection: "<source_namespace>", to: "<target_namespace>", dropTarget: <true|false>, writeConcern: <document>, comment: <any> } )
명령 필드
이 명령에는 다음 필드가 포함됩니다.
필드 | 유형 | 설명 |
---|---|---|
renameCollection | 문자열 | 이름을 바꿀 컬렉션의 네임스페이스입니다. 네임스페이스는 데이터베이스 이름과 컬렉션 이름의 조합입니다. |
to | 문자열 | 컬렉션의 새 네임스페이스입니다. 새 네임스페이스가 다른 데이터베이스를 지정하는 경우 renameCollection 명령은 컬렉션을 새 데이터베이스에 복사하고 소스 컬렉션을 제거합니다. 이름 지정 제한 사항을 참조하세요. |
dropTarget | 부울 | |
writeConcern | 문서 | 선택 사항입니다. 작업에 대한 쓰기 고려를 표현하는 문서입니다. 기본값 쓰기 고려를 사용하려면 생략합니다. 샤딩된 클러스터에서 실행하는 경우 |
comment | any | 선택 사항. 이 명령에 첨부할 사용자 제공 코멘트입니다. 설정되면 이 설명은 다음 위치에서 이 명령의 레코드와 함께 표시됩니다.
댓글은 유효한 모든 BSON types (문자열, 정수, 객체, 배열 등)이 될 수 있습니다. |
행동
샤드 컬렉션
MongoDB 5.0부터는 renameCollection
명령을 사용하여 샤딩된 컬렉션의 이름을 변경할 수 있습니다. 대상 데이터베이스는 소스 데이터베이스와 동일해야 합니다.
샤딩되지 않은 컬렉션
소스 및 대상 데이터베이스가 동일한 기본 샤드에 있는 한 renameCollection
을 사용하여 샤딩된 클러스터에서 샤딩되지 않은 컬렉션의 이름을 바꿀 수 있습니다.
Time Series 컬렉션
Time Series 컬렉션의 이름을 변경하는 데는 renameCollection
을 사용할 수 없습니다. 자세한 내용은 Time Series 컬렉션 제한 을 참조하세요.
기존 대상 컬렉션
renameCollection
target
이 기존 컬렉션의 이름이고, 그리고 dropTarget: true
를 지정하지 않으면 실패합니다.
성능
renameCollection
대상 네임스페이스에 따라 성능에 미치는 영향이 다릅니다.
대상 데이터베이스가 소스 데이터베이스와 동일한 경우 renameCollection
은 네임스페이스만 변경합니다. 이는 빠른 작업입니다.
대상 데이터베이스가 소스 데이터베이스와 다른 경우 renameCollection
은 소스 컬렉션의 모든 문서를 대상 컬렉션으로 복사합니다. 컬렉션의 크기에 따라 완료하는 데 시간이 더 걸릴 수 있습니다.
샤딩된 클러스터의 리소스 잠금
버전 5.0에서 변경됨
샤딩된 클러스터에서 샤딩된 컬렉션이나 샤딩되지 않은 컬렉션의 이름을 변경할 때 소스 및 대상 컬렉션은 모든 샤드에서만 독점적으로 잠깁니다. 소스 및 대상 컬렉션에 대한 후속 작업은 이름 바꾸기 작업이 완료될 때까지 기다려야 합니다.
MongoDB 잠금에 대한 자세한 내용은 FAQ: 동시성을 참조하세요.
복제본 세트의 리소스 잠금
동일한 데이터베이스 내에서 컬렉션의 이름을 변경하는 경우 renameCollection
은 작업 기간 동안 소스 및 대상 컬렉션에 대한 배타적 잠금을 얻습니다. 컬렉션에 대한 모든 후속 작업은 renameCollection
이 완료될 때까지 대기해야 합니다.
다른 데이터베이스 간에 컬렉션의 이름을 변경하는 경우 renameCollection
은 대상 데이터베이스에 대해 배타적(W) 잠금을, 소스 데이터베이스에 대해 의도적 공유(r) 잠금을, 소스 컬렉션에 대해 공유(S) 잠금을 얻습니다. 대상 데이터베이스에 대한 후속 작업은 renameCollection
이 독점 데이터베이스 잠금을 해제할 때까지 대기해야 합니다.
MongoDB 잠금에 대한 자세한 내용은 FAQ: 동시성을 참조하세요.
local
Database
복제된 데이터베이스의 컬렉션 이름을 복제되지 않은
local
데이터베이스로 바꿀 수 없습니다.복제되지 않은
local
데이터베이스의 collection 이름은 복제된 데이터베이스로 변경할 수 없습니다.
커서 열기 및 Change Streams
경고
db.collection.renameCollection()
메서드와 renameCollection
명령은 열린 커서를 무효화합니다. 이는 소스나 대상 컬렉션에서 열린 기존 변경 스트림에 대한 무효화 이벤트를 생성하며 현재 이름이 변경된 컬렉션에서 데이터를 반환하고 있는 쿼리도 중단됩니다.
다음과의 상호 작용 mongodump
클라이언트가 덤프 프로세스 중에 renameCollection
명령을 실행하면 --oplog
로 시작한 mongodump
는 실패합니다. 자세한 내용은 mongodump.--oplog
를 참조하세요.
예시
다음 예시에서는 test
데이터베이스의 orders
collection 이름을 test
데이터베이스의 orders2014
로 변경합니다.
db.adminCommand( { renameCollection: "test.orders", to: "test.orders2014" } )
mongosh
는 동일한 데이터베이스 내에서 컬렉션 이름을 바꾸는 명령에 대한 db.collection.renameCollection()
헬퍼를 제공합니다. 다음은 이전 예시와 동일합니다.
use test db.orders.renameCollection( "orders2014" )