fix_string_backedUpBlobs_ids.mjs 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. // @ts-check
  2. import { backedUpBlobs } from '../lib/mongodb.js'
  3. import { mongoId } from '../lib/assert.js'
  4. import { ObjectId } from 'mongodb'
  5. import commandLineArgs from 'command-line-args'
  6. const STATS = {
  7. total: 0,
  8. replaced: 0,
  9. skipped: 0,
  10. }
  11. const config = commandLineArgs([
  12. { name: 'commit', type: Boolean, defaultValue: false },
  13. ])
  14. async function processRecord(record) {
  15. STATS.total++
  16. try {
  17. mongoId(record._id)
  18. const newId = new ObjectId(record._id)
  19. if (config.commit) {
  20. await backedUpBlobs.insertOne({ _id: newId, blobs: record.blobs })
  21. await backedUpBlobs.deleteOne({ _id: record._id })
  22. }
  23. STATS.replaced++
  24. } catch (error) {
  25. console.log(error)
  26. STATS.skipped++
  27. }
  28. }
  29. const cursor = backedUpBlobs
  30. .find({ _id: { $type: 'string' } })
  31. .project({ _id: 1, blobs: 1 })
  32. while (await cursor.hasNext()) {
  33. const record = await cursor.next()
  34. await processRecord(record)
  35. }
  36. console.log(
  37. `${!config.commit ? 'DRY RUN' : ''} ${STATS.total} records ${STATS.replaced} replaced, ${STATS.skipped} skipped`
  38. )
  39. process.exit()