使用聚合

时间:2016-12-05 20:22:15

标签: mongodb mongoose pagination

我正在尝试对我从mongoDB获取的搜索结果进行分页,我正在使用mongoDB聚合,现在我遇到的问题是因为我可以使用$ skip和$ limit来实现分页我怎么知道下一页是否存在。我使用这个逻辑假设我在一个页面中显示20个结果现在我将调用21个结果并查看结果是21还是小于21,如果它是21然后这意味着至少有一个结果留下所以下一页是那里否则没有页面。我的代码在下面给出,一切都工作正常,但我认为,因为我每次在我的服务器上提取一个文档,所以我认为,而不是使用这种方法,我可以在聚合管道中写一些逻辑,这样我就不必从我的数据库中再带一个文档。我的意思是有任何方法,以便我可以在变量中存储1,如果结果超过20,否则为0.我尝试使用这个逻辑,在$ group中有一个变量,并在每个文档上递增,但是无法执行操作成功。

还有另一个解决方案是运行两个查询并行第一个用于计算文档数量,第二个用于获取20个文档,但我不认为这种方法更好,因为它会花费我多一次数据库调用。

我的带有$ skip的代码和每页获取21个结果的$ limit如下所示。

       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中进行分页。

0 个答案:

没有答案