add_multiple_emails.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. const { db } = require('../app/src/infrastructure/mongojs')
  2. const async = require('async')
  3. const minilist = require('minimist')
  4. const updateUser = function(user, callback) {
  5. console.log(`Updating user ${user._id}`)
  6. const update = {
  7. $set: {
  8. emails: [
  9. {
  10. email: user.email,
  11. createdAt: new Date()
  12. }
  13. ]
  14. }
  15. }
  16. db.users.update({ _id: user._id }, update, callback)
  17. }
  18. const updateUsers = (users, callback) =>
  19. async.eachLimit(users, ASYNC_LIMIT, updateUser, function(error) {
  20. if (error) {
  21. callback(error)
  22. return
  23. }
  24. counter += users.length
  25. console.log(`${counter} users updated`)
  26. loopForUsers(callback)
  27. })
  28. var loopForUsers = callback =>
  29. db.users
  30. .find({ emails: { $exists: false } }, { email: 1 })
  31. .limit(FETCH_LIMIT, function(error, users) {
  32. if (error) {
  33. callback(error)
  34. return
  35. }
  36. if (users.length === 0) {
  37. console.log(`DONE (${counter} users updated)`)
  38. return callback()
  39. }
  40. updateUsers(users, callback)
  41. })
  42. var counter = 0
  43. var run = () =>
  44. loopForUsers(function(error) {
  45. if (error) {
  46. throw error
  47. }
  48. process.exit()
  49. })
  50. let FETCH_LIMIT, ASYNC_LIMIT
  51. var setup = function() {
  52. let args = minilist(process.argv.slice(2))
  53. FETCH_LIMIT = args.fetch ? args.fetch : 100
  54. ASYNC_LIMIT = args.async ? args.async : 10
  55. }
  56. setup()
  57. run()