$rename
操作逻辑执行$unset
老名称和新的名称,然后执行 $set
新名称运行。因此,操作可能不保留文档中字段的顺序; 即重命名的字段可以在文档内移动。
1、重命名字段:一级字段
格式:
db.students.updateMany( {}, { $rename: { "nmae": "name" } } )
eg:
#原集合 { "_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,也可以在第一个花括号里面指定修改哪一个id记录的nmae db.students.updateMany( {}, { $rename: { "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" } }
2、重命名嵌入文档中的字段
eg:
#元集合: { "_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" } } #修改 db.students.update( { _id: 1 }, { $rename: { "name.first": "name.fname" } } ) #结果 { "_id" : 1, "alias" : [ "The American Cincinnatus", "The American Fabius" ], "mobile" : "555-555-5555", "name" : { "fname" : "george", "last" : "washington" } }
注释:
×重命名不存在的字段
重命名字段并且现有字段名称引用不存在的字段时,$rename操作员不执行任何操作