1. 程式人生 > >MongoDB學習系列 -- 分頁查詢用法

MongoDB學習系列 -- 分頁查詢用法

查詢分頁幾乎是所有資料庫的訴求,既然資料庫分為關係型和非關係型兩大類,那關於分頁查詢的方法也根據資料庫分類的不同而不同。雖然具體用法是不同的,但核心思想確是一樣的:skip某些記錄select某些記錄。

下面先分別舉例SqlServer以及Mysql 兩種關係型資料庫中分頁查詢的用法。

1、SqlServer

--公式化 設要查詢第n頁,頁大小為p
select top p * from 表名
where 主鍵 not in 
(select top (n-1)*p 主鍵 from表名
)

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大量資料,對效能會由影響。