From 45f2b093f85ec8eb6a0035f9e202f968e5fc4bf9 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Sun, 6 Sep 2015 19:10:24 +0200 Subject: [PATCH] add migrations to fix groups --- migrations/20150906_groups_fix_leaders.js | 49 ++++++++++++++++++ .../20150906_groups_remove_deleted_users.js | 51 +++++++++++++++++++ migrations/20150906_groups_remove_empty.js | 21 ++++++++ 3 files changed, 121 insertions(+) create mode 100644 migrations/20150906_groups_fix_leaders.js create mode 100644 migrations/20150906_groups_remove_deleted_users.js create mode 100644 migrations/20150906_groups_remove_empty.js diff --git a/migrations/20150906_groups_fix_leaders.js b/migrations/20150906_groups_fix_leaders.js new file mode 100644 index 0000000000..988a630955 --- /dev/null +++ b/migrations/20150906_groups_fix_leaders.js @@ -0,0 +1,49 @@ +/* + * Make sure leaders are existing users + */ + +var mongo = require('mongoskin'); + +var dbserver = 'mongodb://url'; +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'); + +dbGroups.findEach({}, {_id: 1, members: 1, leader: 1}, {batchSize: 500}, function(err, group) { + if(err) throw err; + if(!group) return; + + countGroups++; + console.log('Group: ', countGroups); + + var members = group.members; + var leader = group.leader; + + dbUsers.count({_id: group.leader}, function(err, count){ + if(err) throw err; + + // If leader has deleted account + if(count < 1) { + dbGroups.update({ + _id: group._id + }, { + $set: { + // Set first user as new leader + leader: members[0] + } + }, { + multi: false + }, function(err, res){ + if(err) throw err; + + console.log('Updated: ', res); + }); + } + }) +}); \ No newline at end of file diff --git a/migrations/20150906_groups_remove_deleted_users.js b/migrations/20150906_groups_remove_deleted_users.js new file mode 100644 index 0000000000..7ef144070c --- /dev/null +++ b/migrations/20150906_groups_remove_deleted_users.js @@ -0,0 +1,51 @@ +/* + * Remove deleted accounts from groups + */ + +var mongo = require('mongoskin'); + +var dbserver = 'mongodb://url'; +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'); + +dbGroups.findEach({}, {_id: 1, members: 1}, {batchSize: 500}, function(err, group) { + if(err) throw err; + if(!group) return; + + countGroups++; + console.log('Group: ', countGroups); + + var members = group.members; + + // Remove users who deleted their account + members.forEach(function(member){ + dbUsers.count({_id: member}, function(err, count){ + if(err) throw err; + + if(count < 1) { + countUsers++; + console.log('User: ', countUsers); + + dbGroups.update({ + _id: group._id + }, { + $pull: {members: member}, + $inc: {memberCount: -1} + }, { + multi: false + }, function(err, res){ + if(err) throw err; + + console.log('Updated: ', res); + }); + } + }); + }); +}); \ No newline at end of file diff --git a/migrations/20150906_groups_remove_empty.js b/migrations/20150906_groups_remove_empty.js new file mode 100644 index 0000000000..9cc2617165 --- /dev/null +++ b/migrations/20150906_groups_remove_empty.js @@ -0,0 +1,21 @@ +/* + * Remove emoty groups + */ + +var mongo = require('mongoskin'); + +var dbserver = 'mongodb://url'; +var dbname = 'db'; + +var db = mongo.db(dbserver + '/' + dbname + '?auto_reconnect'); +var dbGroups = db.collection('groups'); + +console.log('Begins work on db'); + +dbGroups.remove({ + members: {$size: 0} +}, function(err, res){ + if(err) throw err; + + console.log(res); +}); \ No newline at end of file