habitica-self-host/migrations/20150906_groups_remove_deleted_users.js

87 lines
1.9 KiB
JavaScript
Raw Normal View History

2015-09-06 17:10:24 +00:00
/*
* Remove deleted accounts from groups
*/
var mongo = require('mongoskin');
2015-09-09 20:32:12 +00:00
var async = require('async');
2015-09-06 17:10:24 +00:00
2015-09-09 20:32:12 +00:00
var dbserver = 'url';
2015-09-06 17:10:24 +00:00
var dbname = 'dbname';
var countGroups = 0;
var countUsers = 0;
var db = mongo.db(dbserver + '/' + dbname + '?auto_reconnect');
var dbUsers = db.collection('users');
var dbGroups = db.collection('groups');
console.log('Begins work on db');
2015-09-09 20:32:12 +00:00
function findGroups(gt){
var query = {};
if(gt) query._id = {$gt: gt};
2015-09-06 17:10:24 +00:00
2015-09-09 20:32:12 +00:00
console.log(query)
2015-09-06 17:10:24 +00:00
2015-09-09 20:32:12 +00:00
dbGroups.find(query, {
fields: {_id: 1, members: 1},
limit: 10000,
sort: {
_id: 1
}
}).toArray(function(err, groups){
if(err) throw err;
2015-09-06 17:10:24 +00:00
2015-09-09 20:32:12 +00:00
var lastGroup = null;
if(groups.length === 10000){
lastGroup = groups[groups.length - 1];
}
async.eachLimit(groups, 3, function(group, cb1){
countGroups++;
console.log('Group: ', countGroups, group._id);
var members = group.members;
// Remove users who deleted their account
async.eachLimit(members, 15, function(member, cb2){
dbUsers.findOne({_id: member}, {fields: {_id: 1}}, function(err, user){
if(err) return cb2(err);
if(!user){
countUsers++;
console.log('User removed n. ', countUsers, 'user id ', member, 'group id ', group._id);
dbGroups.update({
_id: group._id
}, {
$pull: {members: member},
$inc: {memberCount: -1}
}, {
multi: false
}, function(err, res){
if(err) return cb2(err);
2015-09-06 17:10:24 +00:00
2015-09-09 20:32:12 +00:00
console.log('Updated: ', res);
return cb2();
});
}else{
cb2();
}
2015-09-06 17:10:24 +00:00
});
2015-09-09 20:32:12 +00:00
}, function(err){
if(err) return cb1(err);
cb1();
});
}, function(err){
if(err) throw err;
if(lastGroup && lastGroup._id){
findGroups(lastGroup._id);
2015-09-06 17:10:24 +00:00
}
});
});
2015-09-09 20:32:12 +00:00
};
findGroups();