關于MongoDB 資料分頁和排序 limit,skip使用者的一些基礎語句,介紹MongoDB 資料分頁和排序執行個體方法。
使用Skip和limit可以如下做資料分頁:
Code:
page1 = db.things.find().limit(20)
page2 = db.things.find().skip(20).limit(20)
page3 = db.things.find().skip(40).limit(20)
備注:可用于分頁,limit是pageSize,skip是第n-1頁*pageSize (n-1表示幾 第1,2...頁)skip表示跳過 多少條資料,聚合管道的優化。
1.$sort + $skip + $limit順序優化
如果在執行管道聚合時,如果$sort、$skip、$limit依次出現的話,例如:
{ $sort: { age : -1 } },
{ $skip: 10 },
{ $limit: 5 }
那麼實際執行的順序為:
{ $sort: { age : -1 } },
{ $limit: 15 },
{ $skip: 10 }
$limit會提前到$skip前面去執行。
此時$limit = 優化前$skip+優化前$limit
這樣做的好處有兩個:
1.在經過$limit管道後,管道内的文檔數量個數會“提前”減小,這樣會節省記憶體,提高記憶體利用效率。
2.$limit提前後,$sort緊鄰$limit這樣的話,當進行$sort的時候當得到前“$limit”個文檔的時候就會停止。
當資料量很小時,這樣做分頁完全沒有問題。但是當資料量很大時,skip操作會變的很慢,應該避免使用。
(不止是mongoDb會這樣,大部分資料庫都是。)可以通過改變查詢文檔的規則來達到分頁效果,避免使用skip來跳過大量的資料。
(通過計算,得到下次查詢應該從什麼地方開始)