This package has been deprecated

Author message:

Please use a more updated version of this plugin at mongoose-paginate-v2

mongoose-custom-pagination

1.0.0 • Public • Published

mongoose-custom-pagination

Pagination plugin for Mongoose

Installation

npm install mongoose-custom-pagination

Usage

Add plugin to a schema and then use model paginate method:

var mongoose         = require('mongoose');
var mongoosePaginate = require('mongoose-custom-pagination');
 
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} - 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}
    • [customLabels] {Object} - Developers can provide custom labels for 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 documents
  • totalDocs {Number} - Total number of documents in collection that match a query
  • limit {Number} - Limit that was used
  • hasPrevPage {Bool} - Availability of prev page.
  • hasNextPage {Bool} - Availability of next page.
  • page {Number} - Current page number
  • totalPages {Number} - Total number of pages.
  • offset {Number} - Only if specified or default page/offset values were used
  • prevPage {Number} - Previous page number if available or NULL
  • nextPage {Number} - Next page number if available or NULL

Examples

Return first 10 documents from 100

Model.paginate({}, { page: 1, limit: 10 }, function(err, result) {
    // result.docs
    // result.totalDocs = 100
    // result.totalPages = 10
    // result.limit = 10
    // result.page = 1
    // result.nextPage = 2
    // result.prevPage = null
    // result.hasNextPage = true
    // result.hasPrevPage = false
});

Same query with custom labels

 
var myCustomLabels = {
    docs: 'data',
    nextPage: 'next',
    prevPage: 'prev',
    totalPages: 'pageCount'
};
 
Model.paginate({}, { page: 1, limit: 10 }, function(err, result) {
    // result.docs <- here docs become data
    // result.totalDocs = 100
    // result.totalPages = 10
    // result.limit = 10
    // result.page = 1
    // result.next = 2 <- here nextPage becomes next
    // result.prev = null <- here prevPage becomes prev
    // result.hasNextPage = true
    // result.hasPrevPage = false
});

Or you can do the same with offset and limit:

Model.paginate({}, { offset: 20, limit: 10 }, function(err, result) {
    // result.docs
    // result.totalPages
    // 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.totalDocs
    // result.limit - 0
    // result.offset - 100
});

Set custom default options for all queries

config.js:

var mongoosePaginate = require('mongoose-custom-pagination');
 
mongoosePaginate.paginate.options = { 
    lean:  true,
    limit: 20
};

controller.js:

Model.paginate().then(function(result) {
    // result.docs - array of plain javascript objects
    // result.limit - 20
});

License

MIT

Dependents (0)

Package Sidebar

Install

npm i mongoose-custom-pagination

Weekly Downloads

0

Version

1.0.0

License

MIT

Unpacked Size

17.9 kB

Total Files

5

Last publish

Collaborators

  • aravindnc