diff --git a/services/web/scripts/helpers/batchedUpdate.js b/services/web/scripts/helpers/batchedUpdate.js index 68972d5310..5b2c09bae0 100644 --- a/services/web/scripts/helpers/batchedUpdate.js +++ b/services/web/scripts/helpers/batchedUpdate.js @@ -8,6 +8,7 @@ if (process.env.BATCH_LAST_ID) { } async function getNextBatch(collection, query, maxId, projection) { + maxId = maxId || BATCH_LAST_ID if (maxId) { query['_id'] = { $gt: maxId } } @@ -35,7 +36,7 @@ async function batchedUpdate(collectionName, query, update, projection) { projection = projection || { _id: 1 } let nextBatch let updated = 0 - let maxId = BATCH_LAST_ID + let maxId while ( (nextBatch = await getNextBatch(collection, query, maxId, projection)) .length @@ -66,6 +67,7 @@ function batchedUpdateWithResultHandling(collection, query, update) { } module.exports = { + getNextBatch, batchedUpdate, batchedUpdateWithResultHandling } diff --git a/services/web/scripts/validate-data-of-model.js b/services/web/scripts/validate-data-of-model.js new file mode 100644 index 0000000000..2d5909ff6d --- /dev/null +++ b/services/web/scripts/validate-data-of-model.js @@ -0,0 +1,47 @@ +const { getNextBatch } = require('./helpers/batchedUpdate') +const { db, waitForDb } = require('../app/src/infrastructure/mongodb') + +const MODEL_NAME = process.argv.pop() +const Model = require(`../app/src/models/${MODEL_NAME}`)[MODEL_NAME] + +function processBatch(batch) { + for (const doc of batch) { + const error = new Model(doc).validateSync() + if (error) { + const { errors } = error + console.log(JSON.stringify({ _id: doc._id, errors })) + } + } +} + +async function main() { + await waitForDb() + const collection = db[Model.collection.name] + + const query = {} + const projection = {} + + let nextBatch + let processed = 0 + let maxId + while ( + (nextBatch = await getNextBatch(collection, query, maxId, projection)) + .length + ) { + maxId = nextBatch[nextBatch.length - 1]._id + processed += nextBatch.length + console.error(maxId, processed) + + processBatch(nextBatch) + } + console.error('done') +} + +main() + .then(() => { + process.exit(0) + }) + .catch(error => { + console.error({ error }) + process.exit(1) + })