Mongoose Aggregation (join operation)

JS
S
JavaScript

Using Bluebird as a Promise Library for mongoose. Mongoose > ~4.15. In this example we join 2 collections: Telemetry <-> Sample

1const Logger = require('../logger');
2
3function run() {
4  return new Promise((resolve, reject) => {
5    // Pipeline Operations
6    const start = moment('2018-03-01')
7      .startOf('day')
8      .toDate();
9    const end = moment('2018-03-26')
10      .endOf('day')
11      .toDate(); // to send
12
13    const query = {
14      timestamp: {
15        $gte: start,
16        $lt: end
17      },
18      telemetry: {
19        $exists: true
20      }
21    };
22
23    TelemetryModel.aggregate()
24      .match(query)
25      .lookup({
26        from: 'sample',
27        localField: 'sample',
28        foreignField: '_id',
29        as: 'sample'
30      })
31      .project({
32        _id: '$_id',
33        name: '$name',
34        telemetry: '$telemetry'
35      })
36      .exec()
37      .each(telemetry => {
38        Logger.log(telemetry);
39      })
40      .then(completed => {
41        resolve('completed');
42      });
43  });
44}

Created on 3/26/2018