使用mongoose-paginate-v2查询缓慢问题
- 2019 年 10 月 25 日
- 筆記
场景
mongoose-paginate-v2 是一个mongoose上的分页插件,我也用过很多次了,但是最近在创建项目遇到了问题。
老代码中不使用分页插件进行查询,然后自己使用中间件进行分页
old codes, 16ms
@Get('') public async index(@Query() query, @Pager() pager: any, @Req() req: Request, @Res() res: Response) { const map: any = {}; if (query.group && query.group !== '') { map.group = query.group; } if (query.username && query.username !== '') { map.username = { $regex: query.username }; } const count = await this.model.countDocuments(map); const page = pager.parse(count); console.log(page); const list = await this.model.find(map).sort({ updateAt: -1 }) .limit(page.limit) .skip(page.skip) .select('_id group username device.deviceType deviceType createAt updateAt status enable creator proxy') .populate('group'); return res.status(HttpStatus.OK).json({ message: 'success', data: { list: [], }, }); }
新代码中使用分页插件,耗时约1.5s 非常的缓慢
use paginate: 1532ms
public async slow(@Query() query, @Pager() pager: any, @Req() req: Request, @Res() res: Response) { const map: any = {}; if (query.group && query.group !== '') { map.group = query.group; } if (query.username && query.username !== '') { map.username = { $regex: query.username }; } const count = await this.model.count(map); const page = pager.parser(count); console.log(page); const list = await this.model.paginate(map, { limit: pager.limit, offset: pager.skip, select: '_id group username device.deviceType deviceType createAt updateAt status enable creator proxy', populate: ['group'], sort: { updateAt: -1 }, }); return res.status(HttpStatus.OK).json({ message: 'success', data: list, }); }
提issue
我也挺忙的,所以没去看代码,直接提了issue,目前收到回复是需要更新到新版本v1.3.3
更新后回复正常
博客: https://github.com/zhaojunlike