back_fill_doc_rev.mjs 1.3 KB

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