時間:2024-03-04 00:33作者:下載吧人氣:28
MongoDB 游標(biāo)詳解
MongoDB中的游標(biāo)與關(guān)系型數(shù)據(jù)庫中的游標(biāo)在功能上大同小異。游標(biāo)相當(dāng)于C語言的指針,可以定位到某條記錄,在MongoDB中,則是文檔。因此在mongoDB中游標(biāo)也有定義,聲明, 打開,讀取,關(guān)閉這么個過程。客戶端通過游標(biāo),能夠?qū)崿F(xiàn)對最終結(jié)果進(jìn)行有效的控制,諸如限制結(jié)果數(shù)量,跳過部分結(jié)果或根據(jù)任意鍵按任意順序的組合對結(jié)果進(jìn)行各種排序等。下文是針對MongoDB游標(biāo)的具體介紹。
一、mongoDB游標(biāo)介紹
db.collection.find()方法返回一個游標(biāo),對于文檔的訪問,我們需要進(jìn)行游標(biāo)迭代 mongoDB的游標(biāo)與關(guān)系型數(shù)據(jù)庫SQL中的游標(biāo)類似,可以通過對游標(biāo)進(jìn)行(如限制查詢結(jié)果數(shù),跳過的結(jié)果數(shù)等)設(shè)置來控制查詢結(jié)果 游標(biāo)會消耗內(nèi)存和相關(guān)系統(tǒng)資源,游標(biāo)使用完后應(yīng)盡快釋放資源 在mongo shell中,如果返回的游標(biāo)結(jié)果集未指定給某個var定義的變量,則,游標(biāo)自動迭代20次,即輸出前20個文檔,超出20的情形則需要輸入it來翻頁 本文內(nèi)容描述手動方式來實現(xiàn)游標(biāo)迭代來訪問文檔或者是用索引迭代 聲明游標(biāo) var cursor = db.collectioName.find(query,projection); 打開游標(biāo) Cursor.hasNext() 判斷游標(biāo)是否已經(jīng)取到盡頭 讀取數(shù)據(jù) Cursor.Next() 取出游標(biāo)的下一個文檔 關(guān)閉游標(biāo) cursor.close() 此步驟可省略,通常為自動關(guān)閉,也可以顯示關(guān)閉 用while循環(huán)來遍歷游標(biāo)示例 var mycursor = db.bar.find({_id:{$lte:5}}) while(mycursor.hasNext()) { printjson(mycursor.next()); } 游標(biāo)生命周期 a、游標(biāo)完成匹配結(jié)果的迭代后,它會清除自身; b、客戶端的游標(biāo)已經(jīng)不在作用域內(nèi),驅(qū)動程序回向服務(wù)器發(fā)送一條特別的消息,讓其銷毀; c、缺省情況下,游標(biāo)在十分鐘內(nèi)沒有使用,游標(biāo)自動關(guān)閉或者客戶端已經(jīng)迭代完整個游標(biāo); d、可以通過cursor.noCursorTimeout()來定義游標(biāo)超時時間 如:var myCursor = db.users.find().noCursorTimeout() e、對于自定義超時時長的游標(biāo)可以使用cursor.close() 來關(guān)閉游標(biāo) 如:db.collection.find(<query>).close()
網(wǎng)友評論