mongoose-cursor-paginate
v1.0.1
Published
cursor based mongoose pagination
Downloads
4
Maintainers
Readme
mongoose-cursor-paginate
This module is been developed to provide mongoose support for mongo-cursor-pagination. Please read this blog post to get clear understanding on cursor based pagination.
Installation
npm install mongoose-cursor-paginate --save
Usage
Define your mongoose schema and plug the mongoose-cursor-paginate module.
const paginate = require('mongoose-cursor-paginate');
const PostSchema = new mongoose.Schema({
title: String,
date: Date,
body : String,
author: {
type: mongoose.Schema.ObjectId,
ref: 'Author'
}
});
PostSchema.plugin(mongooseCursorPaginate);
const Post = mongoose.model('Post', PostSchema); // Post.paginate()
Model.paginate([params])
Parameters
[params]
{Object}[query]
{Object} - Query criteria. Documentation[limit]
{Number} - The page size.[fields]
{Object} - Fields to query in the Mongo object format, e.g.{_id: 1, timestamp :1}
. The default is to query all fields.[paginatedField]
{String} - The field name to query the range for. The field must be:- Orderable. We must sort by this value. If duplicate values for paginatedField field exist, the results will be secondarily ordered by the _id.
- Indexed. For large collections, this should be indexed for query performance.
- Immutable. If the value changes between paged queries, it could appear twice.
The default is to use the Mongo built-in '_id' field, which satisfies the above criteria.
The only reason to NOT use the Mongo _id field is if you chose to implement your own ids.
[next]
{String} - The value to start querying the page.[previous]
{String} - The value to start querying previous page.[sortAscending]
{Boolean} - The value to sort data in asc
Return value
Promise fulfilled with object having properties:
results
{Array} - Array of documentsprevious
{String} - previous id.hasPrevious
{Boolean} - will be true only if previous data exist.next
{String} - next id.hasNext
{Boolean} - will be true only if next data exist.
Examples
Post.paginate({
query : { title : { $regex : new RegExp('^Post.*$') } },
limit : 10,
fields : { author : 1 },
paginatedField : 'date',
})
.then((result) => {
...
})
Tests
npm install
npm run test