| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import mongodbLegacy from 'mongodb'
- import { db, getCollectionInternal } from './lib/mongodb.mjs'
- const { ObjectId, ReadPreference } = mongodbLegacy
- const BATCH_SIZE = parseInt(process.env.BATCH_SIZE || '1000', 10)
- const MIN_ID = process.env.MIN_ID
- const tags = ['server-ce', 'server-pro', 'saas']
- const migrate = async () => {
- const docOps = await getCollectionInternal('docOps')
- const filter = {}
- if (MIN_ID) {
- filter._id = { $gte: new ObjectId(MIN_ID) }
- }
- const records = docOps
- .find(filter, { readPreference: ReadPreference.secondaryPreferred })
- .sort({ _id: 1 })
- let docsProcessed = 0
- let batch = []
- for await (const record of records) {
- const docId = record.doc_id
- const version = record.version
- batch.push({
- updateOne: {
- filter: {
- _id: docId,
- version: { $exists: false },
- },
- update: { $set: { version } },
- },
- })
- if (batch.length >= BATCH_SIZE) {
- await db.docs.bulkWrite(batch, { ordered: false })
- batch = []
- }
- docsProcessed += 1
- if (docsProcessed % 100000 === 0) {
- console.log(`${docsProcessed} docs processed - last id: ${docId}`)
- }
- }
- if (batch.length > 0) {
- await db.docs.bulkWrite(batch, { ordered: false })
- }
- console.log(`DONE - ${docsProcessed} docs processed`)
- }
- const rollback = async ({ db }) => {
- // Nothing to do on rollback. We don't want to remove versions from the docs
- // collection because they might be more current than the ones in the docOps
- // collection.
- }
- export default {
- tags,
- migrate,
- rollback,
- }
|