我正在使用
Mongo 3.4.0。
$rename运算符用于更新字段名称,具有以下格式:
{$rename: { <field1>: <newName1>, <field2>: <newName2>, ... } }
例如
db.getCollection('user').update( { _id: 1 }, { $rename: { 'fname': 'FirstName', 'lname': 'LastName' } } )
新字段名称必须与现有字段名称不同。要在嵌入式文档中指定一个,使用点表示法。
此操作将为集合中的所有文档将字段名称从nmae重命名为name:
db.getCollection('user').updateMany( {}, { $rename: { "add": "Address" } } )
db.getCollection('user').update({}, {$rename:{"name.first":"name.FirstName"}}, false, true);
在上述方法中,false和true分别代表了:upsert:false、multi:true。若要更新所有记录,需要使用multi:true。
重命名嵌入文档中的字段
db.getCollection('user').update( { _id: 1 }, { $rename: { "name.first": "name.fname" } } )
使用链接: https://docs.mongodb.com/manual/reference/operator/update/rename/
$rename
版本的update
方法中,false, true
表示{ upsert:false, multi:true }
。你需要设置multi:true
才能更新所有记录。请注意不改变原意,尽可能通俗易懂。 - RickyAupsert:true
会在字段名不存在时创建字段名,默认为false
。 - IGRACHname.last
不是table.field
。如果你仔细阅读问题,就会发现name
字段保存了一个对象。 - Marc Dingenadb.foo.update({}, {$rename:{"name.0.additional":"name.0.last"}}, false, true)
吗? - bncc