Definición
$renameEl operador actualiza el nombre de un
$renamecampo.
Sintaxis
{ $rename: { <field1>: <newName1>, <field2>: <newName2>, ... } }
El nuevo nombre del campo debe ser diferente del nombre del campo existente. Para especificar un <field> en un documento incrustado, utiliza notación de puntos.
Considera el siguiente ejemplo:
db.students.updateOne( { _id: 1 }, { $rename: { 'nickname': 'alias', 'cell': 'mobile' } } )
La operación anterior renombra el campo nickname a alias y el campo cell a mobile en un documento donde _id es 1.
Comportamiento
Cuando ejecutas una $rename Operación, MongoDB realiza las siguientes acciones:
Borre el
<field>antiguo y el campo con<newName>del documento (usando$unset).Realice una operación
$setcon<newName>, usando el valor de<field>.
Atomicidad
Cada documento que coincide con un comando para actualizar se actualiza mediante una operación individual. Las operaciones de actualización (como $rename) solo garantizan la atomicidad a nivel de un solo documento.
Orden de campos
Es posible que la operación $rename no mantenga el orden de los campos en el documento.
Actualizar el orden de procesamiento
A partir de MongoDB 5.0, los operadores de actualización procesan los campos de documentos con nombres basados en cadenas en orden lexicográfico. Los campos con nombres numéricos se procesan en orden numérico. Consulta Comportamiento del operador de actualización para obtener más información.
Renombra los campos del documento incrustado
El operador $rename puede mover campos hacia dentro y hacia fuera de documentos incrustados.
$rename no funciona en documentos incrustados en arreglos.
Otras consideraciones
Ejemplos
Crear la colección 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" } } ] )
Los documentos contienen un error, nmae debería ser name. Los ejemplos en las siguientes secciones actualizan los documentos de la colección.
Renombrar un campo
Para renombrar un campo, llame al operador con el nombre actual del campo y el nuevo $rename nombre:
db.students.updateMany( { "nmae": { $ne: null } }, { $rename: { "nmae": "name" } } )
Esta operación verifica documentos donde el campo nmae no es nulo y actualiza esos documentos para renombrar el campo nmae a 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" } }
Renombrar un campo en un documento incrustado
Para renombrar un campo en un documento incrustado, utilice el operador $rename con la notación de punto para referirse al campo. Si el campo va a permanecer en el mismo documento incrustado, utilice también la notación de punto en el nuevo nombre, como se muestra a continuación:
db.students.updateOne( { _id: 1 }, { $rename: { "name.first": "name.fname" } } )
Esta operación renombra el campo incrustado first a fname:
{ _id: 1, alias: [ 'The American Cincinnatus', 'The American Fabius' ], mobile: '555-555-5555', name: { last: 'washington', fname: 'george' } }
Renombrar un campo que no existe
Cuando se cambia el nombre de un campo y el nombre del campo existente hace referencia a un campo que no existe, el operador no hace nada, como se muestra a $rename continuación:
db.students.updateOne( { _id: 1 }, { $rename: { 'wife': 'spouse' } } )
Esta operación no realiza ninguna acción porque no existe un campo llamado wife.