使用聚合与mongodb分页
我正在尝试对我从使用聚合与mongodb分页,mongodb,mongoose,pagination,Mongodb,Mongoose,Pagination,我正在尝试对我从mongoDB获取的搜索结果进行分页,我正在使用mongoDB聚合,现在我面临的问题是,由于我可以使用$skip和$limit实现分页,我如何知道下一页是否存在。我使用了这个逻辑,假设我在一个页面中显示20个结果,现在我将调用21个结果,看看结果是21还是小于21,如果是21,那么这意味着至少剩下一个结果,所以下一个页面没有剩余页面。下面给出了我的代码,一切正常,但我认为,由于我每次都会在服务器上获取一个以上的文档,因此我认为,我可以在聚合管道中编写一些逻辑,而不是使用这种方法,
mongoDB
获取的搜索结果进行分页,我正在使用mongoDB
聚合,现在我面临的问题是,由于我可以使用$skip和$limit实现分页,我如何知道下一页是否存在。我使用了这个逻辑,假设我在一个页面中显示20个结果,现在我将调用21个结果,看看结果是21还是小于21,如果是21,那么这意味着至少剩下一个结果,所以下一个页面没有剩余页面。下面给出了我的代码,一切正常,但我认为,由于我每次都会在服务器上获取一个以上的文档,因此我认为,我可以在聚合管道中编写一些逻辑,而不是使用这种方法,这样我就不必再从数据库中获取一个以上的文档。我的意思是,如果结果大于20,是否有任何方法可以将1存储在变量中,否则为0。我试图使用这个逻辑,在$group中有一个变量,在每个文档上都有一个增量,但未能成功执行该操作
还有另一种解决方案是运行两个并行查询,第一个用于计算文档数,第二个用于获取20个文档,但我认为这种方法并不更好,因为它会让我多花费一次数据库调用
下面给出了我的代码,其中包含$skip和$limit,每页可以获取21个结果
studcouponsmodel.aggregate(
{ $match: { mobile_no: mobile_no }},
{ $unwind: '$cpns'},
{ $match: {'cpns.expir_date': { $lt: curr_time }}},
{ $group: {_id: '$mobile_no', cpns: {$push: '$cpns.id'}}},
{ $limit: page_size + 1 },
{ $skip: page * page_size },
function(err, docs) {
if (err) {
console.log('Error Finding query results');
console.log(err);
res.json({success: 0, message : err});
return next(err);
} else {
}
});
谁能告诉我有什么更好的方法,或者你们都尝试过使用聚合在mongoDB
中分页吗