Mongo aggregation builder

npm install maggregate
7 downloads in the last week
52 downloads in the last month


Simple aggregation pipeline builder for MongoDb. Inspired by the eloquent aheckmann/mquery.

Example Usage

var Maggregate = require('maggregate');

require('mongodb').connect(uri, function (err, db) {
  if (err) return handleError(err);

  // get a collection
  var collection = db.collection('artists');

  // Create an instance of an aggregation
  var aggregation = new Maggregate(collection);

  // Build and execute
    .match({'works.medium': 'paint'})
    .match({'works.medium': 'paint'})
    .group({_id: '$_id', paintingCount: { $sum: 1 }});

  // Or with a callback...
  var aggregation = new Maggregate(collection);
    .match({'works.medium': 'paint'})
    .match({'works.medium': 'paint'})
    .group({_id: '$_id', paintingCount: { $sum: 1 }}, cb);

Supported Operations

Currently, all mongo aggregation pipeline operators are supported. To learn how to use them, see the documentation for them.

All operations map to their same name, without the $ prefix. All operations are chainable, and can take a callback for their last argument, making the call to exec unnecessary.

Briefly, the operations are:

  • project
  • match
  • limit
  • skip
  • unwind
  • group
  • sort
  • geoNear

Additional Methods

Maggregate provides a few methods to help use the built aggregation, in addition to the operators specified above.


change the collection on the aggregation. returns the chainable interface.

 var writers = db.collection('writers');


Executes the aggregation. Takes a callback in the form of function(err, resp){...}).exec(function(err, resp) {
   //Do stuff with it.


Wraps the db response using the given model. Simply passes the response into the given constructor. Returns the chainable interface.

 var AnalyticsReport = require('./analytics-report-model.js')

 // ...
 // Bunch of queries to make a complex analytics report from the collection
 // ...

 aggregation.exec(function(err, report) {
   report instanceof AnalyticsReport === true // true
npm loves you