https://github.com/reisraff/mongoose-paginate
fork of edwardhotchkiss/mongoose-paginate project to fix a deprecation warning with mongoose library >= 5.2
https://github.com/reisraff/mongoose-paginate
Last synced: 3 months ago
JSON representation
fork of edwardhotchkiss/mongoose-paginate project to fix a deprecation warning with mongoose library >= 5.2
- Host: GitHub
- URL: https://github.com/reisraff/mongoose-paginate
- Owner: reisraff
- License: mit
- Created: 2018-09-04T14:16:13.000Z (about 7 years ago)
- Default Branch: version-5.0.3
- Last Pushed: 2018-07-13T17:33:34.000Z (about 7 years ago)
- Last Synced: 2025-03-11T16:46:36.475Z (7 months ago)
- Language: JavaScript
- Size: 1020 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# mongoose-paginate
Pagination plugin for [Mongoose](http://mongoosejs.com)
[](https://npmjs.org/package/mongoose-paginate)
[](https://travis-ci.org/edwardhotchkiss/mongoose-paginate)**Note:** This plugin will only work with Node.js >= 4.0 and Mongoose >= 4.0.
## Installation
```sh
npm install mongoose-paginate
```## Usage
Add plugin to a schema and then use model `paginate` method:
```js
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](https://docs.mongodb.org/manual/tutorial/query-documents)
* `[options]` {Object}
- `[select]` {Object | String} - Fields to return (by default returns all fields). [Documentation](http://mongoosejs.com/docs/api.html#query_Query-select)
- `[sort]` {Object | String} - Sort order. [Documentation](http://mongoosejs.com/docs/api.html#query_Query-sort)
- `[populate]` {Array | Object | String} - Paths which should be populated with other documents. [Documentation](http://mongoosejs.com/docs/api.html#query_Query-populate)
- `[lean=false]` {Boolean} - Should return plain javascript objects instead of Mongoose documents? [Documentation](http://mongoosejs.com/docs/api.html#query_Query-lean)
- `[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
```js
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`:
```js
Model.paginate({}, { offset: 20, limit: 10 }, function(err, result) {
// result.docs
// result.total
// result.limit - 10
// result.offset - 20
});
```With promise:
```js
Model.paginate({}, { offset: 20, limit: 10 }).then(function(result) {
// ...
});
```#### More advanced example
```js
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:
```js
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:
```js
var mongoosePaginate = require('mongoose-paginate');mongoosePaginate.paginate.options = {
lean: true,
limit: 20
};
```controller.js:
```js
Model.paginate().then(function(result) {
// result.docs - array of plain javascript objects
// result.limit - 20
});
```## Tests
```sh
npm install
npm test
```## License
[MIT](LICENSE)