使用mongoose-paginate-v2查詢緩慢問題

場景

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 更新後回覆正常

Issue地址

博客: https://github.com/zhaojunlike
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章