52 lines
1.7 KiB
JavaScript
52 lines
1.7 KiB
JavaScript
import dotenv from "dotenv";
|
|
dotenv.config();
|
|
import { MongoClient } from "mongodb";
|
|
const uri = process.env.MONGODB_URI || "";
|
|
const options = {
|
|
maxPoolSize: 10,
|
|
};
|
|
const dbName = process.env.MONGODB_DB; // change this to prod db when needed
|
|
async function migrateData() {
|
|
const MODULE_ARRAY = ["reading", "listening", "writing", "speaking", "level"];
|
|
const client = new MongoClient(uri, options);
|
|
|
|
try {
|
|
await client.connect();
|
|
console.log("Connected to MongoDB");
|
|
if (!process.env.MONGODB_DB) {
|
|
throw new Error("Missing env var: MONGODB_DB");
|
|
}
|
|
const db = client.db(dbName);
|
|
for (const string of MODULE_ARRAY) {
|
|
const collection = db.collection(string);
|
|
const result = await collection.updateMany(
|
|
{ private: { $exists: false } },
|
|
{ $set: { access: "public" } }
|
|
);
|
|
const result2 = await collection.updateMany(
|
|
{ private: true },
|
|
{ $set: { access: "private" }, $unset: { private: "" } }
|
|
);
|
|
const result1 = await collection.updateMany(
|
|
{ private: { $exists: true } },
|
|
{ $set: { access: "public" } }
|
|
);
|
|
console.log(
|
|
`Updated ${
|
|
result.modifiedCount + result1.modifiedCount
|
|
} documents to "access: public" in ${string}`
|
|
);
|
|
console.log(
|
|
`Updated ${result2.modifiedCount} documents to "access: private" and removed private var in ${string}`
|
|
);
|
|
}
|
|
console.log("Migration completed successfully!");
|
|
} catch (error) {
|
|
console.error("Migration failed:", error);
|
|
} finally {
|
|
await client.close();
|
|
console.log("MongoDB connection closed.");
|
|
}
|
|
}
|
|
//migrateData(); // uncomment to run the migration
|