back_fill_doc_rev.js 1.2 KB

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