Estoy tratando de actualizar el nombre de un campo en el documento mongodb usando la expresión regular en el nombre de ese campo pero no puedo, ¿alguien puede ayudarme a hacerlo? Tengo un documento de persona que contiene un campo con el correo electrónico de la persona, el nombre de ese campo es "firstname_lastname@gmail.com"
y quiero reemplazar el carácter "_"
en todos los campos de correo electrónico por "_dot_"
. Aquí esta lo que hice :
db.getCollection("person").updateMany( { {'email.'+'.*_.*': { $exists: true } }, { $rename:{'email.'+'.*_.*': 'email.'+'.*_dot_.*' });
y aquí la estructura de mi documento:
person { name: { .... } email:{ firstname_lastname1@gmail.com : { .... other fields }, firstname_lastname2@gmail.com : { .... other fields } } }
gracias de antemano
Sin embargo, puede usar $objectToArray
para convertir los correos electrónicos en una matriz de tuplas kv. Luego, $split
divídalos por _
y vuelva a unirlos por _dot_
. Finalmente, haga $arrayToObject
para volver a convertir a la estructura original.
db.collection.aggregate([ { "$addFields": { "email": { "$objectToArray": "$email" } } }, { "$addFields": { "email": { "$map": { "input": "$email", "as": "e", "in": { k: { "$ltrim": { "input": { "$reduce": { "input": { "$split": [ "$$ek", "_" ] }, "initialValue": "", "in": { "$concat": [ "$$value", "_dot_", "$$this" ] } } }, "chars": "_dot_" } }, v: "$$ev" } } } } }, { "$addFields": { "email": { "$arrayToObject": "$email" } } } ])
Aquí está el Mongo Playground para su referencia.