리네임 컬렉션
정의
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 컬렉션
renameCollection
을 사용하여 time series 컬렉션의 이름을 바꿀 수 없습니다. 자세한 내용은 Time Series 컬렉션 제한을 참조하세요.
기존 대상 컬렉션
target
이 기존 컬렉션의 이름이고 또 dropTarget: true
를 지정하지 않은 경우 renameCollection
은 실패합니다.
성능
버전 3.6에서 변경됨.
renameCollection
은 대상 네임스페이스에 따라 성능에 미치는 영향이 다릅니다.
대상 데이터베이스가 소스 데이터베이스와 동일한 경우 renameCollection
은 네임스페이스만 변경합니다. 이는 빠른 작업입니다.
대상 데이터베이스가 소스 데이터베이스와 다른 경우 renameCollection
은 소스 컬렉션의 모든 문서를 대상 컬렉션으로 복사합니다. 컬렉션의 크기에 따라 완료하는 데 시간이 더 걸릴 수 있습니다.
샤딩된 클러스터의 리소스 잠금
버전 5.0에서 변경됨
샤딩된 클러스터에서 샤딩된 컬렉션이나 샤딩되지 않은 컬렉션의 이름을 변경할 때 소스 및 대상 컬렉션은 모든 샤드에서만 독점적으로 잠깁니다. 소스 및 대상 컬렉션에 대한 후속 작업은 이름 바꾸기 작업이 완료될 때까지 기다려야 합니다.
MongoDB 잠금에 대한 자세한 내용은 FAQ: 동시성을 참조하세요.
복제본 세트의 리소스 잠금
동일한 데이터베이스 내에서 컬렉션의 이름을 변경하는 경우 renameCollection
은 작업 기간 동안 소스 및 대상 컬렉션에 대한 배타 잠금을 얻습니다. 컬렉션에 대한 모든 후속 작업은 renameCollection
이 완료될 때까지 기다려야 합니다.
다른 데이터베이스 간에 컬렉션의 이름을 변경하는 경우 renameCollection
은 대상 데이터베이스에 대한 배타(W) 잠금, 소스 데이터베이스에 대한 의도 공유(r) 잠금, 소스 컬렉션에 대한 공유(S) 잠금을 획득합니다. 대상 데이터베이스에 대한 후속 작업은 renameCollection
이 독점 데이터베이스 잠금을 해제할 때까지 기다려야 합니다.
MongoDB 잠금에 대한 자세한 내용은 FAQ: 동시성을 참조하세요.
local
Database
복제된 데이터베이스의 컬렉션 이름을 복제되지 않은
local
데이터베이스로 바꿀 수 없습니다.복제되지 않은
local
데이터베이스의 collection 이름은 복제된 데이터베이스로 변경할 수 없습니다.
커서 열기
경고
db.collection.renameCollection()
메서드와 renameCollection
명령은 현재 데이터를 반환 중인 쿼리를 방해하는, 열린 커서를 무효화합니다.
변경 스트림
Change Streams의 경우,db.collection.renameCollection()
메서드 및 renameCollection
명령은 소스 또는 대상 컬렉션에 열려 있는 기존의 모든 Change Streams에 대해 무효화를 생성합니다.
다음과의 상호 작용 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" )