edwardhotchkiss / mongoose-paginate

Mongoose.js (Node.js & MongoDB) Document Query Pagination
MIT License
985 stars 218 forks source link

mongoose-paginate

Pagination plugin for Mongoose

NPM version Build status

Note: This plugin will only work with Node.js >= 4.2 and Mongoose >= 4.2

NPM

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])

Parameters

Return value

Promise fulfilled with object having properties:

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