mongoose-pagination-plugin-typescript
v1.0.1
Published
[](https://www.npmjs.com/package/mongoose-pagination-plugin-typescript)
Readme
mongoose-aggregate-paginate-typescript
A page based custom aggregate pagination library for Mongoose with customizable labels.
If you are looking for basic query pagination library without aggregate, use this one mongoose-pagination-plugin-typescript
Installation
npm i mongoose-pagination-plugin-typescript
yarn add mongoose-pagination-plugin-typescriptUsage
Adding the plugin to a schema,
import mongoose, { Schema, Document, Model, Aggregate } from "mongoose";
import { PaginateOptions, PaginateResult, paginationPlugin } from "mongoose-pagination-plugin-typescript";
interface CustomModel<T extends Document> extends Model<T> {
aggregatePaginate: (
aggregate: Aggregate<T[]>,
options?: PaginateOptions
) => Promise<PaginateResult<T>>;
}
const mySchema: Schema<InterfaceModel> = new Schema({
/* your schema definition */
});
mySchema.plugin(paginationPlugin);
const MyModel: CustomModel<InterfaceModel> = mongoose.model<InterfaceModel, CustomModel<InterfaceModel>>(
"SampleModel",
mySchema
);
export default MyModel;
and then use model aggregatePaginate method,
import { PaginateOptions } from "mongoose-pagination-plugin-typescript";
import MyModel from "../models/samplemodel";
const myAggregate = User.aggregate([{ $match: { name: { $exists: true } } }]);
const options: PaginateOptions = { page: 2, limit: 5, sort: { name: 1 } };
// 1st way
const result = await MyModel.aggregatePaginate(myAggregate,options);
console.log(results);
// 2nd way
MyModel.aggregatePaginate(myAggregate, options)
.then(function (results) {
console.log(results);
})
.catch(function (err) {
console.log(err);
});Model.aggregatePaginate([aggregateQuery], [options])
Returns promise
Parameters
[aggregate-query]{Object} - Aggregate Query criteria. Documentation[options]{Object}[sort]{Object | String} - Sort order. Documentation[page]{Number} - Current Page (Defaut: 1)[limit]{Number} - Docs. per page (Default: 10).[allowDiskUse]{Bool} - To enable diskUse for bigger queries. (Default: False)
pagination results are retrieved or when an error has occurred.
Return value
Promise fulfilled with object having properties:
docs{Array} - Array of documentstotal{Number} - Total number of documents that match a querylimit{Number} - Limit that was usedpage{Number} - Current page numberpages{Number} - Total number of pages.
Sample Usage
Return first 10 documents from 100
const options = {
page: 1,
limit: 10,
};
// Define your aggregate.
const aggregate = Model.aggregate();
Model.aggregatePaginate(aggregate, options)
.then(function (result) {
// result.docs
// result.total = 100
// result.limit = 10
// result.page = 1
// result.pages = 10
})
.catch(function (err) {
console.log(err);
});