做實驗驗證MongoDB分頁的兩種方法
下面是我的測試方法:
> db.chenfeng.save({age:1,name:"duansf"})
WriteResult({ "nInserted" : 1 })
> db.chenfeng.save({age:2,name:"duansf"})
WriteResult({ "nInserted" : 1 })
> db.chenfeng.save({age:3,name:"duansf"})
WriteResult({ "nInserted" : 1 })
> db.chenfeng.save({age:4,name:"duansf"})
WriteResult({ "nInserted" : 1 })
> db.chenfeng.save({age:5,name:"duansf"})
WriteResult({ "nInserted" : 1 })
> db.chenfeng.save({age:6,name:"duansf"})
WriteResult({ "nInserted" : 1 })
> db.chenfeng.find()
{ "_id" : ObjectId("5714419cf7c81959e12a904e"), "age" : 1, "name" : "duansf" }
{ "_id" : ObjectId("571441a3f7c81959e12a904f"), "age" : 2, "name" : "duansf" }
{ "_id" : ObjectId("571441a7f7c81959e12a9050"), "age" : 3, "name" : "duansf" }
{ "_id" : ObjectId("571441abf7c81959e12a9051"), "age" : 4, "name" : "duansf" }
{ "_id" : ObjectId("571442b0f7c81959e12a9052"), "age" : 5, "name" : "duansf" }
{ "_id" : ObjectId("571442bcf7c81959e12a9053"), "age" : 6, "name" : "duansf" }
>
第一種方法
查詢第一頁的資料(按兩條資料為一頁):
> db.chenfeng.find().sort({"age":1}).limit(2);
{ "_id" : ObjectId("5714419cf7c81959e12a904e"), "age" : 1, "name" : "duansf" }
{ "_id" : ObjectId("571441a3f7c81959e12a904f"), "age" : 2, "name" : "duansf" }
>
查詢第二頁的資料:
> db.chenfeng.find().sort({"age":1}).skip(2).limit(2);
{ "_id" : ObjectId("571441a7f7c81959e12a9050"), "age" : 3, "name" : "duansf" }
{ "_id" : ObjectId("571441abf7c81959e12a9051"), "age" : 4, "name" : "duansf" }
>
查詢第三頁的資料:
> db.chenfeng.find().sort({"age":1}).skip(4).limit(4);
{ "_id" : ObjectId("571442b0f7c81959e12a9052"), "age" : 5, "name" : "duansf" }
{ "_id" : ObjectId("571442bcf7c81959e12a9053"), "age" : 6, "name" : "duansf" }
>
第二種方法:
查詢第一頁的資料:
> db.chenfeng.find().sort({"age":1}).limit(2);
{ "_id" : ObjectId("5714419cf7c81959e12a904e"), "age" : 1, "name" : "duansf" }
{ "_id" : ObjectId("571441a3f7c81959e12a904f"), "age" : 2, "name" : "duansf" }
>
查詢第二頁和第三頁的資料:
> var c1=db.chenfeng.find().sort({"age":1}).limit(2);
> var latest=null;
> while(c1.hasNext()){
... latest=c1.next();
... }
{
"_id" : ObjectId("571441a3f7c81959e12a904f"),
"age" : 2,
"name" : "duansf"
}
> db.chenfeng.find({"age":{"$gt":latest.age}}).sort({"age":1}).limit(2);
{ "_id" : ObjectId("571441a7f7c81959e12a9050"), "age" : 3, "name" : "duansf" }
{ "_id" : ObjectId("571441abf7c81959e12a9051"), "age" : 4, "name" : "duansf" }
> db.chenfeng.find({"age":{"$gt":latest.age}}).sort({"age":1}).limit(4);
{ "_id" : ObjectId("571441a7f7c81959e12a9050"), "age" : 3, "name" : "duansf" }
{ "_id" : ObjectId("571441abf7c81959e12a9051"), "age" : 4, "name" : "duansf" }
{ "_id" : ObjectId("571442b0f7c81959e12a9052"), "age" : 5, "name" : "duansf" }
{ "_id" : ObjectId("571442bcf7c81959e12a9053"), "age" : 6, "name" : "duansf" }
>
總結來說,如果資料量不是很大的話,可以使用第一種方法,畢竟比較簡單,如果資料量比較大的話,使用第二種方法比較好,
因為這樣就可以不用到skip()這個函式,skip跳過太多的記錄,效率有點低
> db.chenfeng.save({age:1,name:"duansf"})
WriteResult({ "nInserted" : 1 })
> db.chenfeng.save({age:2,name:"duansf"})
WriteResult({ "nInserted" : 1 })
> db.chenfeng.save({age:3,name:"duansf"})
WriteResult({ "nInserted" : 1 })
> db.chenfeng.save({age:4,name:"duansf"})
WriteResult({ "nInserted" : 1 })
> db.chenfeng.save({age:5,name:"duansf"})
WriteResult({ "nInserted" : 1 })
> db.chenfeng.save({age:6,name:"duansf"})
WriteResult({ "nInserted" : 1 })
> db.chenfeng.find()
{ "_id" : ObjectId("5714419cf7c81959e12a904e"), "age" : 1, "name" : "duansf" }
{ "_id" : ObjectId("571441a3f7c81959e12a904f"), "age" : 2, "name" : "duansf" }
{ "_id" : ObjectId("571441a7f7c81959e12a9050"), "age" : 3, "name" : "duansf" }
{ "_id" : ObjectId("571441abf7c81959e12a9051"), "age" : 4, "name" : "duansf" }
{ "_id" : ObjectId("571442b0f7c81959e12a9052"), "age" : 5, "name" : "duansf" }
{ "_id" : ObjectId("571442bcf7c81959e12a9053"), "age" : 6, "name" : "duansf" }
>
第一種方法
查詢第一頁的資料(按兩條資料為一頁):
> db.chenfeng.find().sort({"age":1}).limit(2);
{ "_id" : ObjectId("5714419cf7c81959e12a904e"), "age" : 1, "name" : "duansf" }
{ "_id" : ObjectId("571441a3f7c81959e12a904f"), "age" : 2, "name" : "duansf" }
>
查詢第二頁的資料:
> db.chenfeng.find().sort({"age":1}).skip(2).limit(2);
{ "_id" : ObjectId("571441a7f7c81959e12a9050"), "age" : 3, "name" : "duansf" }
{ "_id" : ObjectId("571441abf7c81959e12a9051"), "age" : 4, "name" : "duansf" }
>
查詢第三頁的資料:
> db.chenfeng.find().sort({"age":1}).skip(4).limit(4);
{ "_id" : ObjectId("571442b0f7c81959e12a9052"), "age" : 5, "name" : "duansf" }
{ "_id" : ObjectId("571442bcf7c81959e12a9053"), "age" : 6, "name" : "duansf" }
>
第二種方法:
查詢第一頁的資料:
> db.chenfeng.find().sort({"age":1}).limit(2);
{ "_id" : ObjectId("5714419cf7c81959e12a904e"), "age" : 1, "name" : "duansf" }
{ "_id" : ObjectId("571441a3f7c81959e12a904f"), "age" : 2, "name" : "duansf" }
>
查詢第二頁和第三頁的資料:
> var c1=db.chenfeng.find().sort({"age":1}).limit(2);
> var latest=null;
> while(c1.hasNext()){
... latest=c1.next();
... }
{
"_id" : ObjectId("571441a3f7c81959e12a904f"),
"age" : 2,
"name" : "duansf"
}
> db.chenfeng.find({"age":{"$gt":latest.age}}).sort({"age":1}).limit(2);
{ "_id" : ObjectId("571441a7f7c81959e12a9050"), "age" : 3, "name" : "duansf" }
{ "_id" : ObjectId("571441abf7c81959e12a9051"), "age" : 4, "name" : "duansf" }
> db.chenfeng.find({"age":{"$gt":latest.age}}).sort({"age":1}).limit(4);
{ "_id" : ObjectId("571441a7f7c81959e12a9050"), "age" : 3, "name" : "duansf" }
{ "_id" : ObjectId("571441abf7c81959e12a9051"), "age" : 4, "name" : "duansf" }
{ "_id" : ObjectId("571442b0f7c81959e12a9052"), "age" : 5, "name" : "duansf" }
{ "_id" : ObjectId("571442bcf7c81959e12a9053"), "age" : 6, "name" : "duansf" }
>
總結來說,如果資料量不是很大的話,可以使用第一種方法,畢竟比較簡單,如果資料量比較大的話,使用第二種方法比較好,
因為這樣就可以不用到skip()這個函式,skip跳過太多的記錄,效率有點低
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2083154/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle兩種管理員驗證方法Oracle
- Python隨機生成驗證碼的兩種方法Python隨機
- 做實驗驗證MongoDB刪除文件後索引是否會自動刪除MongoDB索引
- 驗證代理IP的三種方法
- iPhoneSE怎麼開啟兩步驗證?蘋果iPhoneSE兩步驗證開啟方法iPhone蘋果
- dataguard驗證是否正常同步的2種方法
- QTP處理驗證碼的一種方法QT
- asp.core 同時相容JWT身份驗證和Cookies 身份驗證兩種模式JWTCookie模式
- PHP算式驗證碼和漢字驗證碼的實現方法PHP
- 兩種閃回查詢的使用實驗
- jQueryValidate自定義各種驗證方法jQuery
- jsp 做http驗證JSHTTP
- 使用Validator做SpringMVC的驗證框架 - Validator前端驗證SpringMVC框架前端
- DWR(AJAX的一種Java實現)做的分頁!!Java
- Laravel 表單驗證器的幾種使用方法Laravel
- 使用 JavaScript 驗證電子郵件的 4 種方法JavaScript
- 幾種開發時安全驗證的實現
- MVC驗證09-使用MVC的Ajax.BeginForm方法實現非同步驗證MVCORM非同步
- MongoDB分頁查詢的方法及效能MongoDB
- MongoDB 分頁查詢的方法及效能MongoDB
- easy-captcha實現驗證碼驗證APT
- SSH整合實現分頁查詢(兩種方式)
- mongodb簡單分片實驗MongoDB
- 【實驗】兩種方法刪除表中的列與空間儲存釋放
- 單頁應用 - Token 驗證
- php短視訊原始碼,兩種基礎的滑塊元件驗證PHP原始碼元件
- Spring Boot 3中實現多種身份驗證方法開源案例Spring Boot
- 正規表示式驗證六位數以上數字,符號,字母任意兩種混合的密碼驗證策略符號密碼
- ElasticSearch 通過nginx做HTTP驗證ElasticsearchNginxHTTP
- AngularJS 如何做身份驗證AngularJS
- 實驗7.Vlan劃分實驗
- 使用JWT做RESTful API的身份驗證-Go語言實現JWTRESTAPIGo
- js各種驗證總結JS
- 實驗 詳解Docker的各種操作小實驗Docker
- 換種方式使用 Laravel 的 request 驗證Laravel
- Javascript驗證方法大全JavaScript
- mongodb簡單副本集實驗MongoDB
- TP6實現前後端分離的圖片驗證碼,驗證碼以介面形式返回後端