我正在为我的网站构建一个API(使用Node.js和Mongoose),我想在其中加入分页。我的问题如下:如果页面大小是例如15,我发出第一页的请求,所以它向我发送按创建日期排序的前15项,但是如果在我发出第二页请求之前,该怎么办?在数据库中创建了15个新项目,如果我只是在mongoose上使用跳过,则返回的数据将与之前相同。
有没有办法避免猫鼬的双倍?我目前所拥有的是"排除"查询中的参数因此排除了已加载的所有项目,但我在想是否有大量已加载的项目,网址可能很长,而且我不确定这是件好事......
有更好的方法可以做到这一点,还是我不得不让它有双倍的风险?
答案 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)
您可以使用skip
和limit
功能,您可以在其中传递min
和max
值。
就像在第一页中一样,如果你得到15个最小值和最大值的记录值将是:
min = 0
和max = 15
第2页
min = 15
和max = 30