node.jsmongodbloopbackjs

MongoDB aggregation on Loopback


How do I obtain the sum of a Loopback PersistedModel?

There does not seem to be a documentation on how to achieve that.

If possible I would like to avoid having to find all the rows and sum it in Node.js.

UPDATE

Trying out the example from https://github.com/strongloop/loopback/issues/890

var bookCollection = Book.getDataSource().connector.collection(Book.modelName);

I got an error

throw new Error('MongoDB connection is not established');

How do I get a handle on the collection to manually run aggregate query on a MongoDB collection?


Solution

  • Finally managed to get it working. Most examples left out the connect() part.

    My working code:

    Book.getDataSource().connector.connect(function(err, db) {
      var collection = db.collection('Book');
      var author = Book.getDataSource().ObjectID(authorId);
      collection.aggregate([
        { $match: { authorId: author } },
        { $group: {
          _id: authorId,
         total: { $sum: "$price" }
        }}
      ], function(err, data) {
        if (err) return callback(err);
        return callback(null, data);
      });
    });