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.
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
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