mongoose-pagination-plugin-typescript
v1.0.1
Published
[![npm version](https://img.shields.io/npm/v/mongoose-pagination-plugin-typescript.svg)](https://www.npmjs.com/package/mongoose-pagination-plugin-typescript)
Downloads
143
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-typescript
Usage
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);
});