Pagination plugin for Mongoose
npm install mongoose-paginatePagination plugin for Mongoose


Note: This plugin will only work with Node.js >= 4.0 and Mongoose >= 4.0.
``sh`
npm install mongoose-paginate
Add plugin to a schema and then use model paginate method:
`js
var mongoose = require('mongoose');
var mongoosePaginate = require('mongoose-paginate');
var schema = new mongoose.Schema({ / schema definition / });
schema.plugin(mongoosePaginate);
var Model = mongoose.model('Model', schema); // Model.paginate()
`
Returns promise
Parameters
* [query] {Object} - Query criteria. Documentation[options]
* {Object}[select]
- {Object | String} - Fields to return (by default returns all fields). Documentation [sort]
- {Object | String} - Sort order. Documentation [populate]
- {Array | Object | String} - Paths which should be populated with other documents. Documentation[lean=false]
- {Boolean} - Should return plain javascript objects instead of Mongoose documents? Documentation[leanWithId=true]
- {Boolean} - If lean and leanWithId are true, adds id field with string representation of _id to every document[offset=0]
- {Number} - Use offset or page to set skip position[page=1]
- {Number}[limit=10]
- {Number}[callback(err, result)]
* - If specified the callback is called once pagination results are retrieved or when an error has occurred
Return value
Promise fulfilled with object having properties:
* docs {Array} - Array of documentstotal
* {Number} - Total number of documents in collection that match a querylimit
* {Number} - Limit that was used[page]
* {Number} - Only if specified or default page/offset values were used [pages]
* {Number} - Only if page specified or default page/offset values were used [offset]
* {Number} - Only if specified or default page/offset values were used
#### Skip 20 documents and return 10 documents
`js`
Model.paginate({}, { page: 3, limit: 10 }, function(err, result) {
// result.docs
// result.total
// result.limit - 10
// result.page - 3
// result.pages
});
Or you can do the same with offset and limit:`js`
Model.paginate({}, { offset: 20, limit: 10 }, function(err, result) {
// result.docs
// result.total
// result.limit - 10
// result.offset - 20
});
With promise:
`js`
Model.paginate({}, { offset: 20, limit: 10 }).then(function(result) {
// ...
});
#### More advanced example
`js
var query = {};
var options = {
select: 'title date author',
sort: { date: -1 },
populate: 'author',
lean: true,
offset: 20,
limit: 10
};
Book.paginate(query, options).then(function(result) {
// ...
});
`
#### Zero limit
You can use limit=0 to get only metadata:
`js`
Model.paginate({}, { offset: 100, limit: 0 }).then(function(result) {
// result.docs - empty array
// result.total
// result.limit - 0
// result.offset - 100
});
#### Set custom default options for all queries
config.js:
`js
var mongoosePaginate = require('mongoose-paginate');
mongoosePaginate.paginate.options = {
lean: true,
limit: 20
};
`
controller.js:
`js`
Model.paginate().then(function(result) {
// result.docs - array of plain javascript objects
// result.limit - 20
});
`sh``
npm install
npm test