| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- const { db } = require('../app/js/infrastructure/mongojs')
- const async = require('async')
- const minimist = require('minimist')
- const argv = minimist(process.argv.slice(2))
- const commit = argv.commit !== undefined
- if (!commit) {
- console.log('DOING DRY RUN. TO SAVE CHANGES PASS --commit')
- }
- db.users.aggregate(
- [
- { $match: { 'overleaf.id': { $exists: true } } },
- { $group: { _id: '$overleaf.id', count: { $sum: 1 } } },
- { $match: { count: { $gt: 1 } } }
- ],
- { allowDiskUse: true },
- function(err, results) {
- if (err) throw err
- console.log('FOUND ' + results.length + ' DUPLICATES')
- async.mapSeries(results, removeDuplicates, function(err) {
- if (err) throw err
- console.log('DONE')
- process.exit()
- })
- }
- )
- function removeDuplicates(duplicate, callback) {
- db.users.findOne({ 'overleaf.id': duplicate._id }, function(err, keepUser) {
- if (err) throw err
- console.log('KEEPING USER ' + keepUser._id + ' FOR OL ' + duplicate._id)
- db.users.find(
- { 'overleaf.id': duplicate._id, _id: { $ne: keepUser._id } },
- function(err, duplicateUsers) {
- if (err) throw err
- async.mapSeries(
- duplicateUsers,
- function(user, cb) {
- console.log(
- 'UNLINKING USER ' + user._id + ' FOR OL ' + duplicate._id
- )
- if (!commit) return cb()
- db.users.update(
- { _id: user._id },
- { $unset: { 'overleaf.id': '' } },
- cb
- )
- },
- function(err) {
- if (err) throw err
- callback()
- }
- )
- }
- )
- })
- }
|