A mongoose plugin that provides pagination via object ids rather than using skip.
APACHE-2.0 License
npm install --save mongoose-efficient-pagination
Using skip is not efficient for large data sets. Rather, we can achieve pagination by sorting by _id then telling mongo to use that _id as a starting point when returning the next page of records.
Example
// configure mongoose
var mongoose = require('mongoose');
var paginator = require('mongoose-efficient-pagination');
// optionally globally configure the default perPage value.
// this can be overridden in the paginate function itself.
paginator.perPage = 25;
Use it with a model...
var Customer = mongoose.model('Customer');
var sortOrder = -1;
var perPage = 10;
var startAfter = '52c1190207d5dbccda00000f'; // this value should be passed from your previous result set.
// Page 1
Customer.find({
status: 'active'
})
.sort({
createdAt: sortOrder, // this is up to you, sort by a field. I chose createdAt for this example.
})
.paginate(perPage, null)
.exec();
// Page 2
Customer.find({
status: 'active'
})
.sort({
createdAt: sortOrder, // this is up to you, sort by a field. I chose createdAt for this example.
})
.paginate(perPage, startAfter) // startAfter is the objectId of the last document in the page 1 data set.
.exec();
Can be called from the mongoose model prototype providing an easy way to paginate the result set of a query.
Kind: inner method of mongooseEfficientPagination Returns: this
Param | Type | Default | Description |
---|---|---|---|
perPage | number | 20 | number of records per page |
[nextID] | ObjectId | (null) | the id of the document which you will be starting after |