Me gustaría actualizar las claves del objeto "valores" en el siguiente documento almacenado en una colección MongoDB:
{ "data": { "name": "Doe", "values": { "AA_Avg": 13, "BB_Avg": 19, "CC_Avg": 18 } } }Para que quede así:
{ "data": { "name": "Doe", "values": { "AA_MT": 13, "BB_MT": 19, "CC_MT": 18 } } }Actualización dinámica, puede usar la actualización con canalización de agregación a partir de MongoDB 4.2,
Primer enfoque: usando $rpelaceOne ,
$objectToArray convierte data.values de objeto a matriz en formato k y v$map para iterar el bucle de la matriz convertida anterior$replaceOne reemplazará la cadena en la base de entrada y reemplazo$arrayToObject de nuevo para convertir de matriz a objeto db.collection.update({}, [{ $set: { "data.values": { $arrayToObject: { $map: { input: { $objectToArray: "$data.values" }, in: { k: { $replaceOne: { input: "$$this.k", find: "Avg", replacement: "MT" } }, v: "$$this.v" } } } } } } ]) Segundo enfoque: usar $split , $arrayElemAt , $concat ,
Puede usar la función $rename esta manera:
Es simple, solo tienes que decir qué campo quieres actualizar y el nuevo valor.
Tenga en cuenta que debido a los objetos anidados, debe usar la notación de puntos como se explica en los documentos
MongoDB usa la notación de puntos para acceder a los elementos de una matriz y para acceder a los campos de un documento incrustado .
db.collection.update({}, { "$rename": { "data.values.AA_Avg": "data.values.AA_MT", "data.values.CC_Avg": "data.values.BB_MT", "data.values.DD_Avg": "data.values.CC_MT" } })Ejemplo aquí