濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > MongoDB快速翻頁(yè)的方法

MongoDB快速翻頁(yè)的方法

熱門(mén)標(biāo)簽:南京400電話(huà)怎樣辦理 企業(yè)智能外呼系統(tǒng)價(jià)格多少 智能電銷(xiāo)機(jī)器人銷(xiāo)售話(huà)術(shù) 徐州ai電銷(xiāo)機(jī)器人原理 福州電銷(xiāo)機(jī)器人源代碼 沈陽(yáng)營(yíng)銷(xiāo)電銷(xiāo)機(jī)器人招商 高德地圖標(biāo)注商戶(hù)位置 機(jī)器人外呼系統(tǒng)軟件存在問(wèn)題 兗州電話(huà)外呼營(yíng)銷(xiāo)系統(tǒng)

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

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

{

  _id,

  name,

  company,

  state

}

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

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

//Page 1

db.users.find().limit (10)

//Page 2

db.users.find().skip(10).limit(10)

//Page 3

db.users.find().skip(20).limit(10)

........

一般來(lái)說(shuō),檢索頁(yè)面n,代碼是這樣的:

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

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

以前的方法不能很好擴(kuò)展其原因是skip() 命令。因此,本節(jié)的目標(biāo)是實(shí)現(xiàn)分頁(yè)不使用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ù)器等??傮w思路如下 :

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

//Page 1

db.users.find().limit(pageSize);

//Find the id of the last document in this page

last_id = ...

//Page 2

users = db.users.find({'_id'> last_id}). limit(10);

//Update the last id with the id of the last document in this page

last_id = ...

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

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

users = db.users.find({'_id'> last_id}). sort(..).limit(10);

//Update the last id with the id of the last document in this page

last_id = ...

以上就是MongoDB快速翻頁(yè)的方法,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • php中文本數(shù)據(jù)翻頁(yè)(留言本翻頁(yè))
  • 如何編寫(xiě)翻頁(yè)函數(shù)?
  • 點(diǎn)圖片上一頁(yè)下一頁(yè)翻頁(yè)效果
  • PHP 翻頁(yè) 實(shí)例代碼
  • PHP 長(zhǎng)文章分頁(yè)函數(shù) 帶使用方法,不會(huì)分割段落,翻頁(yè)在底部
  • php實(shí)現(xiàn)的仿阿里巴巴實(shí)現(xiàn)同類(lèi)產(chǎn)品翻頁(yè)
  • 在圖片上顯示左右箭頭類(lèi)似翻頁(yè)的代碼
  • 解析Android中實(shí)現(xiàn)滑動(dòng)翻頁(yè)之ViewFlipper的使用詳解
  • 通過(guò)MySQL優(yōu)化Discuz!的熱帖翻頁(yè)的技巧
  • PHP翻頁(yè)跳轉(zhuǎn)功能實(shí)現(xiàn)方法

標(biāo)簽:景德鎮(zhèn) 本溪 昭通 鶴崗 吉安 丹東 大理 邯鄲

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MongoDB快速翻頁(yè)的方法》,本文關(guān)鍵詞  MongoDB,快速,翻頁(yè),的,方法,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MongoDB快速翻頁(yè)的方法》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于MongoDB快速翻頁(yè)的方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    汕头市| 沐川县| 斗六市| 黔西县| 集贤县| 大丰市| 阿荣旗| 肥乡县| 四子王旗| 清流县| 砀山县| 漳平市| 二连浩特市| 呼伦贝尔市| 浦北县| 丰都县| 屏东市| 观塘区| 乌海市| 乾安县| 孟津县| 巴中市| 武义县| 香河县| 原平市| 黄梅县| 松滋市| 丹东市| 肥乡县| 辽宁省| 南漳县| 上思县| 辉县市| 孟州市| 荆门市| 和林格尔县| 唐海县| 河源市| 阳东县| 长治县| 来凤县|