有猫鼬专家可以帮我吗?正如标题所说,我想尝试实现基于光标的分页。我在这里看到了一个关于它的旧帖子,但我想看看我怎么能得到第二组帖子。
我得到这部分
const items = db.items.find({}).sort({
_id: -1
}).limit(2);
const next = items[items.length - 1]._id
res.json({ items, next })
但是我如何应用第二部分呢?我应该为此创建一条单独的路线吗?
const items = db.items.find({
_id: { $lt: req.query.next }
}).sort({
_id: -1
}).limit(2);
const next = items[items.length - 1]._id
res.json({ items, next })
您应该在1条路由中实现此功能,使用skip
和limit
。
一样:
const skip = Number(req.query.skip ?? 0);
const limit = Number(req.query.limit ?? 2);
const items = db.items.find({}).sort({
_id: -1
}).skip(skip).limit(limit);
const next = items[items.length - 1]._id
res.json({ items, next })
现在对于下一页,您将需要发送包含这些新查询参数的请求:
https://myapp.com/myroute?skip=2&limit=2
---- EDIT ----.
使用next
对象id而不是skip
来跳过,如下所示:
const filterQuery = {};
if (req.query.next) {
filterQuery._id = {$lt: ObjectId(req.query.next)}
}
const items = db.items.find(filterQuery).sort({
_id: -1
}).limit(2);
const next = items[items.length - 1]._id
res.json({ items, next })
调用将是:
https://myapp.com/myroute?next={{itemId}}