add_multiple_emails.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. const mongojs = require('../app/js/infrastructure/mongojs')
  2. const { db } = mongojs
  3. const async = require('async')
  4. const minilist = require('minimist')
  5. const updateUser = function (user, callback) {
  6. console.log(`Updating user ${user._id}`)
  7. const update = {
  8. $set: {
  9. emails: [{
  10. email: user.email,
  11. createdAt: new Date()
  12. }]
  13. }
  14. }
  15. db.users.update({_id: user._id}, update, callback)
  16. }
  17. const updateUsers = (users, callback) =>
  18. async.eachLimit(users, ASYNC_LIMIT, updateUser, function (error) {
  19. if (error) {
  20. callback(error)
  21. return
  22. }
  23. counter += users.length
  24. console.log(`${counter} users updated`)
  25. loopForUsers(callback)
  26. })
  27. var loopForUsers = callback =>
  28. db.users.find(
  29. { emails: {$exists: false} },
  30. { 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) { throw error }
  46. process.exit()
  47. })
  48. let FETCH_LIMIT, ASYNC_LIMIT
  49. var setup = function () {
  50. let args = minilist(process.argv.slice(2))
  51. FETCH_LIMIT = (args.fetch) ? args.fetch : 100
  52. ASYNC_LIMIT = (args.async) ? args.async : 10
  53. }
  54. setup()
  55. run()