MongoDB 使用Skip和limit分頁
使用Skip和limit可以如下做數(shù)據(jù)分頁:
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表示跳過 多少條數(shù)據(jù), 聚合管道的優(yōu)化
1.$sort + $skip + $limit順序優(yōu)化
如果在執(zhí)行管道聚合時(shí),如果$sort、$skip、$limit依次出現(xiàn)的話,例如:
{ $sort: { age : -1 } }, { $skip: 10 }, { $limit: 5 }
那么實(shí)際執(zhí)行的順序?yàn)椋?/p>
{ $sort: { age : -1 } }, { $limit: 15 }, { $skip: 10 }
$limit會(huì)提前到$skip前面去執(zhí)行。
此時(shí)$limit = 優(yōu)化前$skip+優(yōu)化前$limit
這樣做的好處有兩個(gè):
1.在經(jīng)過$limit管道后,管道內(nèi)的文檔數(shù)量個(gè)數(shù)會(huì)“提前”減小,這樣會(huì)節(jié)省內(nèi)存,提高內(nèi)存利用效率。
2.$limit提前后,$sort緊鄰$limit這樣的話,當(dāng)進(jìn)行$sort的時(shí)候當(dāng)?shù)玫角啊?limit”個(gè)文檔的時(shí)候就會(huì)停止。
當(dāng)數(shù)據(jù)量很小時(shí),這樣做分頁完全沒有問題。但是當(dāng)數(shù)據(jù)量很大時(shí),skip操作會(huì)變的很慢,應(yīng)該避免使用?! ?/p>
(不止是mongoDb會(huì)這樣,大部分?jǐn)?shù)據(jù)庫都是。)可以通過改變查詢文檔的規(guī)則來達(dá)到分頁效果,避免使用skip來跳過大量的數(shù)據(jù)。
(通過計(jì)算,得到下次查詢應(yīng)該從什么地方開始)
相關(guān)文章
mongodb增刪改查詳解_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了mongodb增刪改查詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08MongoDB Windows安裝服務(wù)方法與注意事項(xiàng)
這篇文章主要介紹了MongoDB Windows安裝服務(wù)方法與注意事項(xiàng)的相關(guān)資料,MongoDB作為一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫,近兩年大受追捧。數(shù)據(jù)靈活的存取方式和高效的處理使得它廣泛用于互聯(lián)網(wǎng)應(yīng)用,需要的朋友可以參考下2016-12-12MongoDB快速入門筆記(六)之MongoDB刪除文檔操作
這篇文章主要介紹了MongoDB快速入門筆記(六)之MongoDB刪除文檔操作 的相關(guān)資料,需要的朋友可以參考下2016-06-06mongodb exception: $concat only supports strings, not Number
這篇文章主要介紹了mongodb exception: $concat only supports strings, not NumberInt32解決辦法,需要的朋友可以參考下2014-06-06MongoDB教程之?dāng)?shù)據(jù)操作實(shí)例
這篇文章主要介紹了MongoDB教程之?dāng)?shù)據(jù)操作實(shí)例,本文講解了批量插入、數(shù)據(jù)庫清除、數(shù)據(jù)更新、修改器、數(shù)組修改器、upsert等內(nèi)容,需要的朋友可以參考下2015-05-05