back_fill_doc_rev.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. const { db } = require('../app/src/infrastructure/mongodb')
  2. const { batchedUpdate } = require('./helpers/batchedUpdate')
  3. const DRY_RUN = !process.argv.includes('--dry-run=false')
  4. const LOG_EVERY_IN_S = parseInt(process.env.LOG_EVERY_IN_S, 10) || 5
  5. async function main(DRY_RUN) {
  6. let processed = 0
  7. let deleted = 0
  8. let lastLog = 0
  9. function logProgress() {
  10. console.log(`rev missing ${processed} | deleted=true ${deleted}`)
  11. }
  12. await batchedUpdate(
  13. 'docs',
  14. { rev: { $exists: false } },
  15. async docs => {
  16. if (!DRY_RUN) {
  17. await db.docs.updateMany(
  18. {
  19. _id: { $in: docs.map(doc => doc._id) },
  20. rev: { $exists: false },
  21. },
  22. { $set: { rev: 1 } }
  23. )
  24. }
  25. processed += docs.length
  26. deleted += docs.filter(doc => doc.deleted).length
  27. if (Date.now() - lastLog >= LOG_EVERY_IN_S * 1000) {
  28. logProgress()
  29. lastLog = Date.now()
  30. }
  31. },
  32. {
  33. _id: 1,
  34. deleted: true,
  35. }
  36. )
  37. logProgress()
  38. }
  39. module.exports = main
  40. if (require.main === module) {
  41. main(DRY_RUN)
  42. .then(() => {
  43. console.log('Done.')
  44. process.exit(0)
  45. })
  46. .catch(error => {
  47. console.error({ error })
  48. process.exit(1)
  49. })
  50. }