Actualmente estoy trabajando en un proyecto que guarda datos regularmente en una base de datos MongoDB. En esta base de datos tengo varios elementos y cada documento contiene la fecha.
Los documentos contienen un tipo incorrecto para el atributo de fecha.
Es por una mala inserción, todos los documentos tienen una fecha en formato de cadena. Puedo actualizar cada atributo con la interfaz gráfica de MongoDB Atlas, pero esta solución es demasiado larga.
Quería saber si en MongoDB tenemos una solución para actualizar el tipo de un atributo en todos los documentos de una colección.
Si entiendo bien, puedes probar estos:
db.collection.aggregate([ { "$addFields": { "date": { "$toDate": "$date" } } } ]) db.collection.aggregate([ { "$addFields": { "date": { "$convert": { "input": "$date", "to": "date" } } } } ]) db.collection.aggregate([ { "$addFields": { "date": { "$dateFromString": { "dateString": "$date", "format": "%m-%d-%Y" } } } } ]) var bulkOps = []; var cursor = db.collection.find({}); cursor.forEach(function (doc) { var newDate = new ISODate(doc.date); bulkOps.push( { "updateOne": { "filter": { "_id": doc._id }, "update": { "$set": { "date": newDate } } } } ); }); if (bulkOps.length > 0) { db.collection.bulkWrite(bulkOps); }Para su caso, la solución más simple es usar $toDate en una actualización con canalización de agregación
db.collection.update({}, [ { "$addFields": { "date": { "$toDate": "$date" } } } ])Aquí está el parque infantil de Mongo para su referencia.
Si necesita atender con otro formato de fecha, puede usar $dateFromString .
db.collection.update({}, [ { "$addFields": { "date": { "$dateFromString": { "dateString": "$date", "format": <your format here> } } } } ]) Puede consultar esta documentación oficial en $dateFromString con respecto al analizador de formato.