Docs Menu
Docs Home
/
MongoDBマニュアル
/ / / /

$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を使用)。

  • <field>の値を使用して、 <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" }
}
] )

ドキュメントにエラーが含まれています。 nmaenameである必要があります。次のセクションの例では、コレクション内のドキュメントを更新します。

フィールドの名前を変更するには、フィールドの現在の名前と新しい名前を指定して$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という名前のフィールドがないため、この操作は何も実行されません。

Tip

以下も参照してください。

戻る

$mul