codecombat/scripts/mongodb/migrations/2016-04-14-populate-classrooms-with-levels.js

34 lines
1.1 KiB
JavaScript
Raw Normal View History

2016-04-13 09:54:24 -07:00
load('bower_components/lodash/dist/lodash.js');
var courses = db.courses.find({}).sort({_id:1}).toArray();
var ids = _.pluck(courses, 'campaignID');
var campaigns = db.campaigns.find({_id: {$in: ids}}).toArray();
var campaignMap = {};
for (var campaignIndex in campaigns) {
var campaign = campaigns[campaignIndex];
campaignMap[campaign._id.str] = campaign;
}
var coursesData = [];
for (var courseIndex in courses) {
var course = courses[courseIndex];
var courseData = { _id: course._id, levels: [] };
var campaign = campaignMap[course.campaignID.str];
var levels = _.values(campaign.levels);
levels = _.sortBy(levels, 'campaignIndex');
_.forEach(levels, function(level) {
levelData = { original: ObjectId(level.original) };
_.extend(levelData, _.pick(level, 'type', 'slug', 'name'));
courseData.levels.push(levelData);
});
coursesData.push(courseData);
}
print('constructed', JSON.stringify(coursesData, null, '\t'));
db.classrooms.update(
{}, // Set all
//{courses: {$exists: false}}, // Set all w/out values
{$set: {courses: coursesData}},
{multi: true}
);