MongoDB学习系列 -- 分页查询用法

查询分页几乎是所有数据库的诉求,既然数据库分为关系型和非关系型两大类,那关于分页查询的方法也根据数据库分类的不同而不同。虽然具体用法是不同的,但核心思想确是一样的:skip某些记录select某些记录。

下面先分别举例SqlServer以及Mysql 两种关系型数据库中分页查询的用法。

1、SqlServer

--公式化 设要查询第n页,页大小为p
select top p * from 表名
where 主键 not in 
(select top (n-1)*p 主键 from表名
)

关于SqlServer分页查询的具体用法请参考 MSSql Server基础学习系列———分页查询

2、Mysql

select A,B,C 
from table 
where filed = cond 
order by field desc(asc) 
limit num1,num2;

关于Mysql的分页查询方式比较直观理解:limit即从第多少条记录开始,取多少条记录。详细用法请参考:分页查询优化

关于oracle数据库本人在工作中未曾使用过,详细用法可以参考:分页查询优化

OK,上面说的都是关系型数据库,接下来我们来学习一下非关系型数据库MongoDB分页查询的使用。

MongoDB不像关系型数据库有sql语言,MongoDB中只有各种api(不知道这样称呼是否准确),想要实现查询分页功能也只能依赖于这些方法实现,具体就是skip、sort、limit,OK,下面我们就来了解一下这几个方法的使用。

> db.ydm.find()
{ "_id" : ObjectId("5b4056fcd3c72e6c8d190cf9"), "name" : "xiaoming", "sex" : 0 }
{ "_id" : ObjectId("5b40578ad3c72e6c8d190cfa"), "phone" : "131**" }
{ "_id" : ObjectId("5b4057ccd3c72e6c8d190cfb"), "phone" : "152**" }
{ "_id" : ObjectId("5b4057dbd3c72e6c8d190cfc"), "phone" : "183**" }
{ "_id" : ObjectId("5b589a716b94352ae8e97780"), "phone" : "131**" }
> db.ydm.find().limit(2).skip(3).sort({'sex':1})
{ "_id" : ObjectId("5b4057dbd3c72e6c8d190cfc"), "phone" : "183**" }
{ "_id" : ObjectId("5b4056fcd3c72e6c8d190cf9"), "name" : "xiaoming", "sex" : 0 }

注意:

(1)最好是在sort的字段上建立索引,防止数据内存在内存中排序,数据量较大时对性能影响很大。

(2)skip limit sort三者的先后顺序是无关的,可以随意,为了便于理解,建议按照skip limit sort的顺序操作。

(3)不建议一次skip大量数据,对性能会由影响。

猜你喜欢

转载自blog.csdn.net/ydm19891101/article/details/81212024