mongoose-paginate
    DefinitelyTyped icon, indicating that this package has TypeScript declarations provided by the separate @types/mongoose-paginate package

    5.0.3 • Public • Published

    mongoose-paginate

    Pagination plugin for Mongoose

    NPM version Build status

    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} - 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}
    • [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
    • total {Number} - Total number of documents in collection that match a query
    • limit {Number} - Limit that was used
    • [page] {Number} - Only if specified or default page/offset values were used
    • [pages] {Number} - Only if page specified or default page/offset values were used
    • [offset] {Number} - Only if specified or default page/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

    License

    MIT

    Install

    npm i mongoose-paginate

    DownloadsWeekly Downloads

    20,577

    Version

    5.0.3

    License

    MIT

    Last publish

    Collaborators

    • edwardhotchkiss
    • jokero
    • niftylettuce