Spaces:
Running
Running
| require('dotenv').config({ path: require('path').resolve(__dirname, '../.env') }); | |
| const mongoose = require('mongoose'); | |
| const MONGO_URI = process.env.MONGO_URI; | |
| if (!MONGO_URI) throw new Error('MONGO_URI not set'); | |
| const parseDate = (val) => { | |
| if (!val) return null; | |
| if (val instanceof Date) return val; | |
| const d = new Date(val); | |
| return Number.isNaN(d.getTime()) ? null : d; | |
| }; | |
| async function migrate() { | |
| await mongoose.connect(MONGO_URI); | |
| console.log('Connected to MongoDB'); | |
| const Announcement = require('../models/Announcement'); | |
| const Achievement = require('../models/Achievement'); | |
| for (const Model of [Announcement, Achievement]) { | |
| const docs = await Model.find({ date: { $type: 'string' } }).lean(); | |
| console.log(`${Model.modelName}: found ${docs.length} docs with string dates`); | |
| for (const doc of docs) { | |
| const parsed = parseDate(doc.date); | |
| await Model.updateOne({ _id: doc._id }, { $set: { date: parsed } }); | |
| } | |
| console.log(`${Model.modelName}: migration complete`); | |
| } | |
| await mongoose.disconnect(); | |
| console.log('Done'); | |
| } | |
| migrate().catch((err) => { console.error(err); process.exit(1); }); | |