mongoose-paginate-v2
A cursor based custom pagination library for Mongoose with customizable labels.
If you are looking for aggregate query pagination, use this one mongoose-aggregate-paginate-v2
Installation
npm install mongoose-paginate-v2
Usage
Add plugin to a schema and then use model paginate
method:
var mongoose = ;var mongoosePaginate = ; var mySchema = /* your schema definition */ ; mySchema; var myModel = mongoose; myModel // Usage
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}[customLabels]
{Object} - Developers can provide custom labels for manipulating the response data.
[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 documentstotalDocs
{Number} - Total number of documents in collection that match a querylimit
{Number} - Limit that was usedhasPrevPage
{Bool} - Availability of prev page.hasNextPage
{Bool} - Availability of next page.page
{Number} - Current page numbertotalPages
{Number} - Total number of pages.offset
{Number} - Only if specified or defaultpage
/offset
values were usedprevPage
{Number} - Previous page number if available or NULLnextPage
{Number} - Next page number if available or NULL
Please note that the above properties can be renamed by setting customLabel attribute.
Sample Usage
Return first 10 documents from 100
const options = page: 1 limit: 10; Model;
With custom return labels
Now developers can specify the return field names if they want. Below are the list of attributes whose name can be changed.
- totalDocs
- docs
- limit
- page
- nextPage
- prevPage
- totalPages
You should pass the names of the properties you wish to changes using customLabels
object in options.
Same query with custom labels
const myCustomLabels = totalDocs: 'itemCount' docs: 'itemsList' limit: 'perPage' page: 'currentPage' nextPage: 'next' prevPage: 'prev' totalPages: 'pageCount'; const options = page: 1 limit: 10 customLabels: myCustomLabels; Model;
Other Examples
Using offset
and limit
:
Model;
With promise:
Model;
More advanced example
var query = {};var options = select: 'title date author' sort: date: -1 populate: 'author' lean: true offset: 20 limit: 10; Book;
Zero limit
You can use limit=0
to get only metadata:
Model;
Set custom default options for all queries
config.js:
var mongoosePaginate = ; mongoosePaginatepaginateoptions = lean: true limit: 20;
controller.js:
Model;
Thanks
This is a advanced version of mongoose-paginate forked from Mongoose Paginate. Thanks to the initial author Edward Hotchkiss