问题
官方文档
就是在分页的时候,我们一般用.skip(1).limit(20)
这种方式, 问题是skip里的参数太大的时候, 会非常慢,官方文档对此有解释:
Range queries can use indexes to avoid scanning unwanted documents, typically yielding better performance as the offset grows compared to using skip() for pagination.
stackoverflow
简而言之
就是你虽然用skip(xx)
跳过了xx跳然后作为返回结果,其实mongodb还是扫描了这xx条的
ES和MySQL也有类似的问题
解决
利用索引,比如: 你是要找某个创建日期之后的100条,就可以像下面这样
db.myCollection.find({created_date : { $gt : max_created_date_from_last_result }}).limit(100).sort({created_date:true});