You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 4-6.RSVP
Socket
Book a DemoInstallSign in
Socket

mongoose-custom-pagination

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

mongoose-custom-pagination

Mongoose custom pagination library.

1.0.0
latest
Source
npmnpm
Version published
Weekly downloads
2
Maintainers
1
Weekly downloads
 
Created
Source

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

Keywords

mongoose

FAQs

Package last updated on 17 Jul 2018

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts