62 lines
1.7 KiB
JavaScript
62 lines
1.7 KiB
JavaScript
// Migration to fix offering and lookingFor field structure
|
|
// Run this once to convert string values to object structure
|
|
import mongoose from "mongoose";
|
|
import Member from "../models/member.js";
|
|
import { connectDB } from "../utils/mongoose.js";
|
|
|
|
async function migrateOfferingLookingFor() {
|
|
await connectDB();
|
|
|
|
console.log("Starting migration: fixing offering and lookingFor structure...");
|
|
|
|
try {
|
|
// Find all members where offering or lookingFor is a string (not an object)
|
|
const members = await Member.find({
|
|
$or: [
|
|
{ offering: { $type: "string" } },
|
|
{ lookingFor: { $type: "string" } },
|
|
],
|
|
});
|
|
|
|
console.log(`Found ${members.length} members to migrate`);
|
|
|
|
for (const member of members) {
|
|
const updates = {};
|
|
|
|
// Convert offering if it's a string
|
|
if (typeof member.offering === "string") {
|
|
updates.offering = {
|
|
text: member.offering,
|
|
tags: [],
|
|
};
|
|
console.log(
|
|
`Converting offering for member ${member._id}: "${member.offering}"`,
|
|
);
|
|
}
|
|
|
|
// Convert lookingFor if it's a string
|
|
if (typeof member.lookingFor === "string") {
|
|
updates.lookingFor = {
|
|
text: member.lookingFor,
|
|
tags: [],
|
|
};
|
|
console.log(
|
|
`Converting lookingFor for member ${member._id}: "${member.lookingFor}"`,
|
|
);
|
|
}
|
|
|
|
// Update the member
|
|
if (Object.keys(updates).length > 0) {
|
|
await Member.findByIdAndUpdate(member._id, { $set: updates });
|
|
}
|
|
}
|
|
|
|
console.log("Migration completed successfully!");
|
|
process.exit(0);
|
|
} catch (error) {
|
|
console.error("Migration failed:", error);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
migrateOfferingLookingFor();
|