$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 は次のアクションを実行します。
アトミック性
アップデートコマンドに一致する各ドキュメントは、個別の操作で更新されます。更新操作( $rename
など)では、単一ドキュメント レベルでのみアトミック性が保証されます。
フィールドの順序
$rename
操作では、ドキュメント内のフィールドの順序が保持されない可能性があります。
プロセシング順序の更新
MongoDB 5.0 以降、更新演算子では名前が文字列ベースのドキュメントフィールドを辞書順に処理します。数値名のフィールドは、数値順に処理されます。詳細については、「更新演算子の動作」を参照してください。
埋め込みドキュメントフィールドの名前変更
$rename
演算子は、埋め込みドキュメントにフィールドを移動したり、埋め込みドキュメントからフィールドを移動したりできます。
$rename
配列の埋め込みドキュメントでは機能しません。
その他の考慮事項
例
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
という名前のフィールドがないため、この操作は何も実行されません。