On this page
$rename
在本页面
Definition
$rename
- $rename运算符更新字段名称,格式如下:
{$rename: { <field1>: <newName1>, <field2>: <newName2>, ... } }
新的字段名称必须与现有的字段名称不同。要在嵌入式文档中指定<field>
,请使用dot notation。
考虑以下示例:
db.students.update( { _id: 1 }, { $rename: { 'nickname': 'alias', 'cell': 'mobile' } } )
此操作将字段nickname
重命名为alias
,并将字段cell
重命名为mobile
。
Behavior
$rename运算符在逻辑上执行旧名称和新名称的$unset,然后使用新名称执行$set操作。因此,该操作可能不会保留文档中字段的 Sequences;即重命名的字段可能会在文档中移动。
如果文档中已有一个带有<newName>
的字段,则$rename运算符将删除该字段,并将指定的<field>
重命名为<newName>
。
如果文档中不存在要重命名的字段,则$rename不执行任何操作(即不执行任何操作)。
对于嵌入式文档中的字段,$rename运算符可以重命名这些字段,也可以将字段移入或移出嵌入式文档。如果这些字段位于数组元素中,则$rename不起作用。
Examples
集合students
包含以下文档,其中字段nmae
出现拼写错误,即应为name
:
{
"_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" }
}
本节中的示例将依次更新集合中的文档。
重命名字段
要重命名字段,请使用字段的当前名称和新名称来调用$rename运算符:
db.students.updateMany( {}, { $rename: { "nmae": "name" } } )
此操作将集合中所有文档的字段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" } }
重命名嵌入式文档中的字段
要重命名嵌入文档中的字段,请使用dot notation调用$rename运算符以引用该字段。如果该字段将保留在同一嵌入式文档中,则还应使用新名称中的点符号,如下所示:
db.students.update( { _id: 1 }, { $rename: { "name.first": "name.fname" } } )
此操作将嵌入式字段first
重命名为fname
:
{
"_id" : 1,
"alias" : [ "The American Cincinnatus", "The American Fabius" ],
"mobile" : "555-555-5555",
"name" : { "fname" : "george", "last" : "washington" }
}
重命名不存在的字段
重命名字段时,现有字段名称引用的字段不存在,则$rename运算符不执行任何操作,如下所示:
db.students.update( { _id: 1 }, { $rename: { 'wife': 'spouse' } } )
因为没有名为wife
的字段,所以此操作不执行任何操作。