File size: 1,160 Bytes
e8c33fa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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); });