back_fill_doc_rev.mjs 1.3 KB

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