麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數(shù)據(jù)庫 > MongoDB > 正文

MongoDB快速翻頁的方法

2020-03-14 13:10:50
字體:
供稿:網(wǎng)友

翻閱數(shù)據(jù)是MongoDB最常見的操作之一。一個(gè)典型的場(chǎng)景是需要在你的用戶界面中顯示你的結(jié)果。如果你是批量處理的數(shù)據(jù),同樣重要的是要讓你的分頁策略正確,以便你的數(shù)據(jù)處理可以規(guī)模化。

接下來,讓我們通過一個(gè)例子來看在MongoDB中翻閱數(shù)據(jù)的不同方式。在這個(gè)例子中,我們有一個(gè)CRM數(shù)據(jù)庫的用戶數(shù)據(jù),我們需要通過翻閱瀏覽和在同一時(shí)間顯示10個(gè)用戶。所以實(shí)際上,我們的頁面大小是10。下方是我們的用戶文檔的結(jié)構(gòu):

{  _id,  name,  company,  state}

方法一:Using skip() 和 limit()

MongoDB本身支持分頁操作使用 skip() 和 limit() 指令。skip(n)指令告訴MongoDB,它應(yīng)該跳過“n”結(jié)果和limit(n)指令指示MongoDB,它應(yīng)該限制結(jié)果長(zhǎng)度為“n”結(jié)果。通常情況下,你將使用 skip() 和 limit() 指令,但為了說明情況,我們提供了控制臺(tái)命令,這樣也能達(dá)到相同的結(jié)果。同時(shí),為了代碼比較簡(jiǎn)潔,限制檢查代碼被排除在外。

//Page 1db.users.find().limit (10)//Page 2db.users.find().skip(10).limit(10)//Page 3db.users.find().skip(20).limit(10)........

一般來說,檢索頁面n,代碼是這樣的:

db.users.find().skip(pagesize*(n-1)).limit(pagesize)
然而,隨著數(shù)據(jù)的大小增加,這種方法出現(xiàn)嚴(yán)重的性能問題。其原因是在每次執(zhí)行查詢時(shí),建立了完整的結(jié)果集,那么服務(wù)器必須從收集的開始走到指定的偏移量。當(dāng)偏移量增加時(shí),這一過程會(huì)變得越來越慢。同時(shí),這個(gè)過程沒有有效地使用索引。所以,當(dāng)你有較小的數(shù)據(jù)集時(shí),典型的“skip() ”和“ limit() ”的方法是有用的。如果您正在使用大數(shù)據(jù)集,您需要考慮其他方法。

方法二:Using find() 和limit()

以前的方法不能很好擴(kuò)展其原因是skip() 命令。因此,本節(jié)的目標(biāo)是實(shí)現(xiàn)分頁不使用skip()命令。為此,我們將利用在存儲(chǔ)數(shù)據(jù)中的自然順序,比如時(shí)間戳或文檔中存儲(chǔ)的標(biāo)識(shí)。

在這個(gè)例子中,我們將使用“_id”存儲(chǔ)每個(gè)文檔。“_id”是一個(gè)MongoDB 的ObjectID結(jié)構(gòu),即 12 字節(jié)結(jié)構(gòu)包含了時(shí)間戳、機(jī)械加工、進(jìn)程標(biāo)識(shí)符、計(jì)數(shù)器等。總體思路如下 :

檢索當(dāng)前頁中的最后一個(gè)文檔 _id
在下一個(gè)頁面檢索文件大于此”_id”

//Page 1db.users.find().limit(pageSize);//Find the id of the last document in this pagelast_id = ...//Page 2users = db.users.find({'_id'> last_id}). limit(10);//Update the last id with the id of the last document in this pagelast_id = ...

這種方法利用內(nèi)在的規(guī)則存在_id字段。也因?yàn)?ldquo;_id”字段是默認(rèn)的查找操作,它是非常好的性能指標(biāo)。如果你使用的字段沒有被索引,那么你在操作中會(huì)受到困擾,所以確保字段被索引是非常重要的。

同樣,如果你希望數(shù)據(jù)按照特定順序進(jìn)行排序分頁的話,那么你還可以使用sort()條款與上述技術(shù)。重要的是要確保排序過程是利用索引來獲得最佳性能。您可以使用.explain()后綴來查詢。

users = db.users.find({'_id'> last_id}). sort(..).limit(10);//Update the last id with the id of the last document in this pagelast_id = ...

以上就是MongoDB快速翻頁的方法,希望能給大家一個(gè)參考,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到MongoDB頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: av电影在线网| 黄网站在线免费看 | 欧美日韩在线视频一区 | 深夜福利久久久 | 暴力肉体进入hdxxxx0 | 国产成人在线一区 | 一级免费特黄视频 | 国产精品午夜在线观看 | 中文字幕在线播放第一页 | 黄色免费播放网站 | 精品一区二区久久久久久按摩 | 中国美女一级黄色片 | 亚洲成人福利在线观看 | videos真实高潮xxxx | hdbbwsexvideo| 国产精品视频一区二区三区四 | 国产精品一区久久久久 | 三级国产三级在线 | 色淫视频 | 黄色电影免费提供 | 欧美中文字幕一区二区三区亚洲 | 国产资源视频在线观看 | 亚洲国产精品二区 | 国产精品成人久久 | 国产精品久久久久影院老司 | 毛片在线免费 | 精品久久久久久久 | 欧美三级毛片 | 国产一区网址 | 黄色网络免费看 | 亚洲一区二区在线 | 精品一区二区久久久久久久网精 | 亚洲欧美国产高清 | 欧美性猛交一区二区三区精品 | 久久久久久久久久久久99 | 97久久曰曰久久久 | 欧美一级黄色录相 | 蜜桃视频网站在线观看 | 欧美成人免费 | 亚洲天堂ww | 国产精品久久久乱弄 |