Mongoose migration script update a missing field

JS
S
JavaScript

Simple migration script to add a missing field. Using bluebird as Mongoose promise in order to make spreading promises easier on the eyes.

1const fixTelemetrys = awsCallback => {
2const arr = [];
3Logger.log('fixTelemetrys');
4const telemetryNumbers = ["TLX1"]
5const fullFlow = new Promise((resolve, reject) => {
6  const promiseArrayOfItems = [];
7  telemetryNumbers.forEach(telemetryNr => {
8    const query = {
9      telemetryNumber: telemetryNr,
10    };
11    promiseArrayOfItems.push(
12      TelemetryModel.findOne(query)
13        .then(telemetry => {
14          if (telemetry.missingField) {
15            return[telemetry];
16          } else {
17            const processor = ProcessorModel.find({telemetrys: telemetry._id})
18              .populate('accountId')
19            return[telemetry, processor];
20          }
21        })
22        .spread((telemetry, processor) => {
23          if(processor && processor.length && processor[0].accountId){
24            const { missingField } = processor[0].accountId;
25            if(missingField){
26              const telemetryUpdate = telemetry.update( {missingField: missingField} ).exec();
27              return [telemetryUpdate]
28              // console.log('updating telemetry',telemetry._id, missingField )
29              // return [telemetry]
30            } else {
31              throw new Error('No missingField on the account')
32            }
33          } else {
34            return [telemetry]
35          }
36        })
37        .then(telemetry => {
38          // console.log('end of flow', telemetry)
39        })
40        .catch(err => {
41          console.log(err);
42        })
43    );
44  });
45
46  // Wait for all
47  Promise.all(promiseArrayOfItems)
48    .then(values => {
49      Logger.log('All Promises finished');
50      resolve(values);
51    })
52    .catch(err => {
53      Logger.error('All Promises failed', err);
54      reject(new Error(err));
55    });
56});

Created on 10/17/2018