使用聚合与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
中分页吗