如何在没有重复的情况下在Mongoose中进行分页?

时间:2016-04-30 01:55:15

标签: javascript node.js mongodb mongoose

我正在为我的网站构建一个API(使用Node.js和Mongoose),我想在其中加入分页。我的问题如下:如果页面大小是例如15,我发出第一页的请求,所以它向我发送按创建日期排序的前15项,但是如果在我发出第二页请求之前,该怎么办?在数据库中创建了15个新项目,如果我只是在mongoose上使用跳过,则返回的数据将与之前相同。

有没有办法避免猫鼬的双倍?我目前所拥有的是"排除"查询中的参数因此排除了已加载的所有项目,但我在想是否有大量已加载的项目,网址可能很长,而且我不确定这是件好事......

有更好的方法可以做到这一点,还是我不得不让它有双倍的风险?

2 个答案:

答案 0 :(得分:1)

您可以使用mongoose-paginate-v2

为防止返回的文档重复,您可以通过(最后一个文档ID和限制)

您的查询应类似于:

import { PaginateModel } from 'mongoose-paginate-v2';

constructor(
private readonly _paginateModel: PaginateModel<any>
  ) {}

const query = this._paginateModel
          .find({ _id: { $lt: lastId } });
    this._paginateModel.paginate(query, { limit: 10 });

答案 1 :(得分:0)

您可以使用skiplimit功能,您可以在其中传递minmax值。

就像在第一页中一样,如果你得到15个最小值和最大值的记录值将是:

min = 0max = 15

第2页

min = 15max = 30