Skip to content

Latest commit

 

History

History
113 lines (87 loc) · 3.55 KB

README.md

File metadata and controls

113 lines (87 loc) · 3.55 KB

mongoose-aggregate-paginate

mongoose-aggregate-paginate is a Mongoose plugin easy to add pagination for aggregates. This plugin can be used in combination with view pagination middleware such as express-paginate.

Build Status npm version Dependency Status Test Coverage js-standard-style

NPM

Index

Install

npm install mongoose-aggregate-paginate --save

Usage

This plugin must first be added to a schema:

let mongooseAggregatePaginate = require('mongoose-aggregate-paginate');

mySchema.plugin(mongooseAggregatePaginate);

MyModel will have a new function called paginate (e.g. MyModel.aggregatePaginate()).

MyModel.aggregatePaginate(aggregate, options, callback)

Arguments

  • aggregate - An object of the Mongoose aggregate.
  • options - An object with options for the Mongoose query, such as sorting
    • page - Default: 1
    • limit - Default: 10
    • sort - Default: undefined
  • callback(err, results, pages, total) - A callback is called once pagination results are retrieved, or an error has occurred. If not specified promise will be returned

Returns

  • Promise - Promise object

Examples

let MyModel = mongoose.model('MyModel',{
  name : String,
  age: Number,
  city, String
})

// find users above 18 by city
let aggregate = MyModel.aggregate();
aggregate.match({age : {'lt' : 18 } })
.group({ _id: '$city' , count : { '$sum' : 1 } })
let options = { page : 1, limit : 15}

// callback
MyModel.aggregatePaginate(aggregate, options, function(err, results, pages, count) {
  if(err) 
  {
    console.err(err)
  }
  else
  { 
    console.log(results)
  }
})

// Promise
 MyModel.aggregatePaginate(aggregate, options)
  .then(function(value) {
    console.log(value.docs, value.pages, value.total)
  })
  .catch(function(err){ 
    console.err(err)
  })

Tests

npm test

Acknowledgements

mongoose-aggregate-paginate was inspired by mongoose-paginate.

License

MIT