Update User model to make migration easier and complete user migration script

pull/320/head
brndnb 2015-04-13 21:30:08 -04:00
parent 83c14cccc4
commit 96ac90274d
2 changed files with 50 additions and 33 deletions

View File

@ -8,7 +8,6 @@ var userSchema = new mongoose.Schema({
email: {
type: String,
lowercase: true,
unique: true,
trim: true,
sparse: true
},
@ -23,7 +22,6 @@ var userSchema = new mongoose.Schema({
profile: {
username: {
type: String,
unique: true,
sparse: true,
lowercase: true,
trim: true

View File

@ -1,42 +1,61 @@
require('dotenv').load();
var mongodb = require('mongodb'),
MongoClient = mongodb.MongoClient,
Server = require('mongodb').Server,
User = require('../models/User.js'),
newChallenges = require('./challengeMapping.json'),
secrets = require('../config/secrets');
mongoose = require('mongoose');
var mongoClient = new MongoClient(new Server('localhost', 27017), {native_parser: true});
var mongoose = require('mongoose');
mongoose.connect(secrets.db);
var stream = User.find( { needsMigration: true }).batchSize(10000).stream();
stream.on('data', function(user) {
console.log('test');
user.needsMigration = true;
user.save();
}).on('error', function(err) {
var i = 1;
var stream = User.find({}).skip(0).limit(0).batchSize(1000).stream();
stream.on('data', function (user) {
if (user.challengesHash) {
this.pause();
console.log(i++);
user.needsMigration = false;
var oldChallenges = Object.keys(user.challengesHash).filter(function (key) {
if (user.challengesHash[key]) {
user.progressTimestamps.push(user.challengesHash[key] * 1000);
}
return user.challengesHash[key];
});
newChallenges.forEach(function (challenge) {
if (oldChallenges.indexOf(challenge.oldNumber) !== -1 && challenge.newId) {
user.completedCoursewares.push({
_id: challenge.newId,
completedDate: user.challengesHash[challenge.oldNumber] * 1000
});
}
});
user.completedCoursewares.forEach(function (course) {
var indexOfCourse = user.uncompletedCoursewares.indexOf(course._id) !== -1;
if (indexOfCourse !== -1) {
user.uncompletedCoursewares.splice(indexOfCourse, 1);
}
});
user.completedBonfires.forEach(function (bonfire) {
bonfire.completedDate = bonfire.completedDate * 1000;
user.progressTimestamps.push(bonfire.completedDate);
});
}
var self = this;
user.save(function(err) {
if (err) {
console.log('woops');
}
self.resume();
});
}).on('error', function (err) {
console.log(err);
}).on('close', function() {
}).on('close', function () {
console.log('done with set');
stream.destroy();
process.exit(0);
});
//console.log(typeof(user.challengesHash));
//if (user.challengesHash && typeof(user.challengesHash) === Object) {
// var oldChallenges = Object.keys(user.challengesHash).filter(function (challenge) {
// console.log(challenge);
// return user.challengesHash[challenge];
// }).map(function (data) {
// return ({
// challengeNum: data,
// timeStamp: user.challengesHash[data]
// });
// });
// oldChallenges.forEach(function (challenge) {
// user.progressTimestamps.push(challenge.timeStamp);
// });
// newChallenges = newChallenges.filter(function (elem) {
// return elem.newId;
// });
// console.log(newChallenges);
//});
//});