5.0.3 • Published 7 years ago

mongoose-paginate v5.0.3

Weekly downloads
23,538
License
MIT
Repository
github
Last release
7 years ago

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

asset-searchapril-taxi-booking-poc-data-modelvue-express-mongodb-boilerplate@holofy/holofy-schemagizconnection-apilf-node-commonmodulenodejsnode-api-templateeves-apiboltosurf2gather-backendarchref-nodejs-msbo-trading-common@infinitebrahmanuniverse/nolb-mongoose-phulionjs@everything-registry/sub-chunk-2199liteauditorkomagraphql-magicirajs-helperliverecordmongoose-entitymongoose-express-generatornode-api-joaoferreiranode-express-mongodbmodeifymodeljs-apimodulenodejs1mintavibe_cache_manager_microservicemobileverticodeapimicrobackmongoose-rest-utilsmagifymagejsmidas-estimator-commonnodetomic-apinodetomic-api-swaggercubitrix-node-server-moduleeis-module-mongooseeskimofbscraper-datastorefh-formsgestta-basebuildpushgeek-web-push-servicespushserverr2pluginorbital-node-servicesprimary-care-api-authprimary-care-api-medical-consultationprimary-care-api-stock-managementopenapi3-to-mongose-typescriptpanta-pasen-apipayment_manager_noderestexsendit-mongoose-repositoryserver-managementzqs-corexmenio@holofy/schema@holofy/skill-store-schema@filup/commontestmontyperx-exampletwitterfollowerexplorertwitterneuralnetworktwittersearchstreamtwitteruserstreamvwcommunicationapi@khanhnq1/prj-core@kennynguyen/bigbom-corewobb-loggervulcano@gfcc/mongo-tenant-repository@cubitrix/cubitrix-node-loan-module@cubitrix/cubitrix-node-accounts-module@domium/commoncvbsp-directorycustom-storagecubitrix-node-loan-modulesotrantech-commonssotcommons-modelcontinestesi-test1statusservicesparkchain-mongoosecrm-gatewaycrowicrystal-corerpg-node-mvcsasamereposedrapidstack@markab.io/node@markab.io/orbital-api@nuworks/http-server@release-notes/hub@raulingg/models@spksoft/mongoose-repositoryaigx-test-sdkakita-service-share-beta
5.0.3

7 years ago

5.0.2

7 years ago

5.0.1

7 years ago

5.0.0

8 years ago

4.2.0

9 years ago

4.0.1

9 years ago

4.0.0

9 years ago

3.1.6

9 years ago

3.1.5

9 years ago

3.1.4

9 years ago

3.1.3

9 years ago

3.1.2

9 years ago

3.1.1

10 years ago

3.1.0

10 years ago

3.0.0

10 years ago

2.3.0

10 years ago

2.2.0

10 years ago

2.1.0

10 years ago

2.0.1

10 years ago

2.0.0

10 years ago

1.4.0

10 years ago

1.3.0

10 years ago

1.2.0

10 years ago

0.1.5

11 years ago

0.1.4

11 years ago

0.1.3

12 years ago

0.1.2

12 years ago

0.1.1

12 years ago

0.1.0

12 years ago

0.0.3

12 years ago

0.0.2

12 years ago