Package Exports
- mongoose-paginate
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (mongoose-paginate) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
mongoose-paginate
Pagination plugin for Mongoose
Note: This plugin will only work with Node.js >= 4.0 and Mongoose >= 4.0.
Installation
npm install mongoose-paginate
Usage
Add plugin to a schema and then use model paginate
method:
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()
Model.paginate([query], [options], [callback])
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} - Iflean
andleanWithId
aretrue
, addsid
field with string representation of_id
to every document[offset=0]
{Number} - Useoffset
orpage
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 defaultpage
/offset
values were used[pages]
{Number} - Only ifpage
specified or defaultpage
/offset
values were used[offset]
{Number} - Only if specified or defaultpage
/offset
values were used
Examples
Skip 20 documents and return 10 documents
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
:
Model.paginate({}, { offset: 20, limit: 10 }, function(err, result) {
// result.docs
// result.total
// result.limit - 10
// result.offset - 20
});
With promise:
Model.paginate({}, { offset: 20, limit: 10 }).then(function(result) {
// ...
});
More advanced example
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:
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:
var mongoosePaginate = require('mongoose-paginate');
mongoosePaginate.paginate.options = {
lean: true,
limit: 20
};
controller.js:
Model.paginate().then(function(result) {
// result.docs - array of plain javascript objects
// result.limit - 20
});
Tests
npm install
npm test