Update User model to make migration easier and complete user migration script
This commit is contained in:
@ -8,7 +8,6 @@ var userSchema = new mongoose.Schema({
|
|||||||
email: {
|
email: {
|
||||||
type: String,
|
type: String,
|
||||||
lowercase: true,
|
lowercase: true,
|
||||||
unique: true,
|
|
||||||
trim: true,
|
trim: true,
|
||||||
sparse: true
|
sparse: true
|
||||||
},
|
},
|
||||||
@ -23,7 +22,6 @@ var userSchema = new mongoose.Schema({
|
|||||||
profile: {
|
profile: {
|
||||||
username: {
|
username: {
|
||||||
type: String,
|
type: String,
|
||||||
unique: true,
|
|
||||||
sparse: true,
|
sparse: true,
|
||||||
lowercase: true,
|
lowercase: true,
|
||||||
trim: true
|
trim: true
|
||||||
|
@ -1,42 +1,61 @@
|
|||||||
require('dotenv').load();
|
require('dotenv').load();
|
||||||
var mongodb = require('mongodb'),
|
var mongodb = require('mongodb'),
|
||||||
MongoClient = mongodb.MongoClient,
|
|
||||||
Server = require('mongodb').Server,
|
|
||||||
User = require('../models/User.js'),
|
User = require('../models/User.js'),
|
||||||
newChallenges = require('./challengeMapping.json'),
|
newChallenges = require('./challengeMapping.json'),
|
||||||
secrets = require('../config/secrets');
|
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);
|
mongoose.connect(secrets.db);
|
||||||
|
|
||||||
var stream = User.find( { needsMigration: true }).batchSize(10000).stream();
|
var i = 1;
|
||||||
stream.on('data', function(user) {
|
var stream = User.find({}).skip(0).limit(0).batchSize(1000).stream();
|
||||||
console.log('test');
|
|
||||||
user.needsMigration = true;
|
stream.on('data', function (user) {
|
||||||
user.save();
|
if (user.challengesHash) {
|
||||||
}).on('error', function(err) {
|
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);
|
console.log(err);
|
||||||
}).on('close', function() {
|
}).on('close', function () {
|
||||||
console.log('done with set');
|
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);
|
|
||||||
//});
|
|
||||||
//});
|
|
||||||
|
Reference in New Issue
Block a user