$rename
정의
$rename
$rename
연산자는 필드 이름을 업데이트합니다.
구문
{ $rename: { <field1>: <newName1>, <field2>: <newName2>, ... } }
새 필드 이름은 기존 필드 이름과 달라야 합니다. 내장된 문서 에서 <field>
를 지정하려면 점 표기법 을 사용합니다.
다음 예를 고려하십시오.
db.students.updateOne( { _id: 1 }, { $rename: { 'nickname': 'alias', 'cell': 'mobile' } } )
이전 작업은 _id
가 1인 문서에서 nickname
필드의 이름을 alias
로 바꾸고 cell
필드의 이름을 mobile
로 바꿉니다.
행동
$rename
작업을 실행하면 MongoDB는 다음 조치를 수행합니다.
문서에서 이전
<field>
및<newName>
이 있는 필드를 삭제합니다($unset
사용).<newName>
의 값을 사용하여<newName>
으로$set
작업을 수행합니다.
원자성
업데이트 명령과 일치하는 각 문서는 개별 작업으로 업데이트됩니다. 업데이트 작업(예: $rename
)은 단일 문서 수준에서만 원자성을 보장합니다.
필드 순서
$rename
작업으로 인해 문서에서 필드 순서가 유지되지 않을 수 있습니다.
처리 순서 업데이트
MongoDB 5.0부터 업데이트 연산자는 문자열 기반 이름이 있는 문서 필드를 사전순으로 처리합니다. 숫자 이름이 있는 필드는 숫자 순서대로 처리됩니다. 자세한 내용은 업데이트 운영자 동작을 참조하십시오.
내장된 문서 필드 이름 변경
$rename
연산자는 내장된 문서 안팎으로 필드를 이동할 수 있습니다.
$rename
배열에 내장된 문서에서는 작동하지 않습니다.
기타 고려 사항
문서 에
<newName>
가 있는 필드 가 이미 있는 경우$rename
연산자 는 해당 필드 를 제거하고 지정된<field>
의 이름을<newName>
로 바꿉니다.이름을 바꿀 필드가 문서에 존재하지 않으면
$rename
은 아무 작업도 수행하지 않습니다.MongoDB 5.0부터 빈 피연산자 표현식(
{ }
)과 함께$rename
과 같은 업데이트 연산자를 사용할 때mongod
에서 더 이상 오류가 발생하지 않습니다. 업데이트가 비어 있으면 변경 사항이 없으며 oplog 항목이 생성되지 않습니다(즉, 작업이 작동하지 않음을 의미합니다).
예시
students
컬렉션을 생성합니다.
db.students.insertMany( [ { "_id": 1, "alias": [ "The American Cincinnatus", "The American Fabius" ], "mobile": "555-555-5555", "nmae": { "first" : "george", "last" : "washington" } }, { "_id": 2, "alias": [ "My dearest friend" ], "mobile": "222-222-2222", "nmae": { "first" : "abigail", "last" : "adams" } }, { "_id": 3, "alias": [ "Amazing grace" ], "mobile": "111-111-1111", "nmae": { "first" : "grace", "last" : "hopper" } } ] )
문서에 오류가 있는 경우, 예를 들어 nmae
가 name
이어야 합니다. 다음 섹션의 예는 컬렉션의 문서를 업데이트합니다.
필드 이름 바꾸기
필드 이름을 바꾸려면 필드의 현재 이름 및 새 이름과 함께 $rename
연산자를 호출하세요.
db.students.updateMany( { "nmae": { $ne: null } }, { $rename: { "nmae": "name" } } )
이 작업은 nmae
필드가 null이 아닌 문서를 확인하고 해당 문서를 업데이트하여 nmae
필드의 이름을 name
으로 바꿉니다.
{ "_id": 1, "alias": [ "The American Cincinnatus", "The American Fabius" ], "mobile": "555-555-5555", "name": { "first" : "george", "last" : "washington" } } { "_id" : 2, "alias" : [ "My dearest friend" ], "mobile" : "222-222-2222", "name" : { "first" : "abigail", "last" : "adams" } } { "_id" : 3, "alias" : [ "Amazing grace" ], "mobile" : "111-111-1111", "name" : { "first" : "grace", "last" : "hopper" } }
내장된 문서에서 필드 이름 바꾸기
임베드된 문서에서 필드 이름을 바꾸려면 점 표기법 $rename
을 사용하여 연산자를 호출하여 필드를 참조합니다. 필드가 같은 임베드된 문서 내에 남아 있어야 한다면, 새 이름에도 점 표기법을 사용하세요.
db.students.updateOne( { _id: 1 }, { $rename: { "name.first": "name.fname" } } )
이 작업은 포함된 필드 first
의 이름을 fname
로 변경합니다.
{ _id: 1, alias: [ 'The American Cincinnatus', 'The American Fabius' ], mobile: '555-555-5555', name: { last: 'washington', fname: 'george' } }
존재하지 않는 필드 이름 바꾸기
필드 이름을 바꿀 때 기존 필드 이름이 존재하지 않는 필드 를 참조하는 경우 $rename
연산자 는 다음과 같이 아무 작업도 수행하지 않습니다.
db.students.updateOne( { _id: 1 }, { $rename: { 'wife': 'spouse' } } )
이 작업은 wife
이라는 필드가 없으므로 아무 작업도 수행하지 않습니다.