| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- // @ts-check
- import { backedUpBlobs } from '../lib/mongodb.js'
- import { mongoId } from '../lib/assert.js'
- import { ObjectId } from 'mongodb'
- import commandLineArgs from 'command-line-args'
- const STATS = {
- total: 0,
- replaced: 0,
- skipped: 0,
- }
- const config = commandLineArgs([
- { name: 'commit', type: Boolean, defaultValue: false },
- ])
- async function processRecord(record) {
- STATS.total++
- try {
- mongoId(record._id)
- const newId = new ObjectId(record._id)
- if (config.commit) {
- await backedUpBlobs.updateOne(
- { _id: newId },
- {
- $addToSet: { blobs: { $each: record.blobs } },
- },
- { upsert: true }
- )
- await backedUpBlobs.deleteOne({ _id: record._id })
- }
- STATS.replaced++
- } catch (error) {
- console.log(error)
- STATS.skipped++
- }
- }
- const cursor = backedUpBlobs
- .find({ _id: { $type: 'string' } })
- .project({ _id: 1, blobs: 1 })
- while (await cursor.hasNext()) {
- const record = await cursor.next()
- await processRecord(record)
- }
- console.log(
- `${!config.commit ? 'DRY RUN' : ''} ${STATS.total} records ${STATS.replaced} replaced, ${STATS.skipped} skipped`
- )
- process.exit()
|