Mongoose eachAsync

JS
S
JavaScript

Simple example for eachAsync with cursor on mongoose find. Will perform a nested find into associated collection. Gives you control over the entire promise chain.

1function run() {
2  return new Promise((resolve, reject) => {
3    const startOfToday = moment('2018-03-01')
4      .startOf('day')
5      .toDate();
6    const endOfToday = moment('2018-03-26')
7      .endOf('day')
8      .toDate(); // to send
9    const query = {
10      timestamp: {
11        $gte: startOfToday,
12        $lt: endOfToday
13      }
14    };
15    TelemetryModel.find(query)
16      .lean()
17      .cursor()
18      .eachAsync(telemetry => {
19        const sampleId = telemetry.sample;
20        return SampleModel.findById(sampleId)
21          .exec()
22          .then(sample => {
23            if (!sample) {
24              Logger.log('Sample Not Found', telemetry._id);
25            }
26          })
27          .catch(err => {
28            reject(err);
29          });
30
31        // Logger.log(telemetry);
32      })
33      .then(completed => {
34        Logger.log('completed');
35      })
36      .catch(err => {
37        reject(err);
38      });
39  });
40}

Created on 3/26/2018