Mercer-Lee的空间

vuePress-theme-reco Mercer-Lee的空间    2018 - 2024
Mercer-Lee的空间 Mercer-Lee的空间

Choose mode

  • dark
  • auto
  • light
TimeLine
分类
  • 数据结构和算法
  • 后端
  • 运维
  • 前端
  • 工具
  • 语言
标签
我的GitHub (opens new window)
author-avatar

Mercer-Lee的空间

27

文章

29

标签

TimeLine
分类
  • 数据结构和算法
  • 后端
  • 运维
  • 前端
  • 工具
  • 语言
标签
我的GitHub (opens new window)
  • MongoDB分页查询优化

    • 传统的分页查询
      • 优化
        • ObjectID

        MongoDB分页查询优化

        vuePress-theme-reco Mercer-Lee的空间    2018 - 2024

        MongoDB分页查询优化


        Mercer-Lee的空间 2019-03-27 MongoDB 数据库

        # 传统的分页查询

        db.users
          .find(conditions)
          .sort({ _id: -1 })
          .skip((page - 1) * numberOfPage)
          .limit(numberOfPage);
        

        从上面的代码可以看出这就是很传统的没有经过优化的分页查询,根据传入的页数和每页数量的来查询到所要的数据。很明显这里有个很大的缺陷,就是skip()这个东西大家都知道他需要一条一条的遍历,一旦集合的数据量大的时候速度会相当慢。

        # 优化

        一般分页查询中都是前端保存页数的变量来作为后端查询的关键变量,但是前面说了这样的弊端。所以很多优化都是找一个惟一值来作为查询条件,并且加上索引来加快查询速度。当然这首先最优的就是_id,只要拿到上次查找的最后一条数据的_id,这篇文章也主要是讲解这个MongoDB特殊的值。

        db.users
          .find(...conditions,{'$lt': _id})
          .sort({_id: -1})
          .limit(numberOfPage)
        

        # ObjectID

        本来写了挺多,但是后面看到其实早就有人写了一篇比我更好的文章来讲解关于ObjectID,所以就不班门弄斧了,再最后奉上链接吧。

        • 文章链接 (opens new window)