@ frabbit/ mongoose- 贴纸 
Mongoose paginate 插件,其中包含完整的打字支持和对最新的mongoose包和类型的支持.
主要想法是将页码选项添加到 find() 财务报告和审定财务报表 aggregate() 而不重复其他参数.
Mongoose似乎在添加更多的打字支持,所以旧的pagination插件会变老.
特征
主要版本与梦雁版本相同
提供两种新型方法
async function findPaginated(
filter: FilterQuery<T> = {}, // same as mongoose.find
pagination: PaginationOptions<T>, // plugin's param
projection?: ProjectionType<T> | null, // same as mongoose.find
options?: QueryOptions<T> | null // same as mongoose.find
): Promise<PaginatedResult<T>> {
}
async function aggregatePaginated(
pipeline: PipelineStage[], // same as mongoose.aggregate
paginate: PaginationOptions<T>, // plugin's param
options?: AggregateOptions // same as mongoose.aggregate
): Promise<PaginatedResult<T>> {
}
结果是:
export class PaginatedResult<T> {
/**
* Documents on page
*/
items: T[] = []
/**
* total documents count
*/
total: number = 0
/**
* page
*/
page: number = 1
/**
* total pages count
*/
totalPages?: number = undefined
/**
* items per page
*/
limit?: number = undefined
/**
* has previous page
*/
hasPrevPage?: Boolean = false
/**
* has next page
*/
hasNextPage?: Boolean = false
/**
* previous page number
*/
prevPage?: number = undefined
/**
* next page number
*/
nextPage?: number = undefined
/**
* The starting index/serial/chronological number of first document in current page.
* (Eg: if page=2 and limit=10, then pagingCounter will be 11)
*/
pagingCounter?: number = undefined
}
安装
npm i -D @frabbit/mongoose-paginate
使用量
import {mongoosePaginate, PaginatedModel, PaginatedResult} from "@frabbit/mongoose-paginate";
interface Some {
field: string
}
type SomeDocument = Document & Some
const someSchema = new Schema({
field: String,
});
someSchema.plugin(mongoosePaginate);
const someModel: PaginatedModel<SomeDocument>
("Some", someSchema);
const items: PaginatedResult<SomeDocument> = await someModel.findPaginated({}, {limit: 10, page: 1})
const items2: PaginatedResult<Some> = await someModel.findPaginated({}, {limit: 10, page: 1}, {field: 1}, {lean: true})