一、什麼是遊標?
遊標(Cursor)是處理數據的一種方法,爲了查看或者處理結果集中的數據,遊標提供了在結果集中一次一行或者多行前進或向後瀏覽數據的能力。
遊標實際上是一種能從包括多條數據記錄的結果集中每次提取一條記錄的機制。遊標可以被看作是一個查詢結果集(可以是零條、一條或由相關的選擇語句檢索出的多條記錄)和結果集中指向特定記錄的遊標位置組成的一個臨時文件,提供了在查詢結果集中向前或向後瀏覽數據、處理結果集中數據的能力。有了遊標,用戶就可以訪問結果集中任意一行數據,在將遊標放置到某行之後,可以在該行或從該位置的行塊上執行操作。
二、MongoDB的遊標
在MongoDB中,使用db.collection.find()方法將返回一個遊標。如果要訪問文檔,我們需要使用遊標的迭代器。但是,在mongo shell中,如果沒有給返回的遊標指定變量,遊標將自動首先返回前20條記錄。下面我們通過幾個具體的例子,來說明如何使用遊標。
定義遊標
var mycursor = db.emp.find()
使用遊標訪問文檔
var mycursor = db.emp.find()while(mycursor.hasNext()){ printjson(mycursor.next()) } 也可以像這樣:mycursor.forEach(printjson)
遊標和數組
var mycursor = db.emp.find() 定義遊標var myarray = mycursor.toArray() 將遊標轉成數組var myDocument = myarray[3] 通過數組元素訪問文檔
分頁查詢: skip和limit
每頁顯示5條記錄var mycursor = db.emp.find().limit(5) 第一頁var mycursor = db.emp.find().limit(5).skip(5) 第二頁
關閉遊標:默認情況下,10分鐘內沒有使用使用的遊標會被自動關閉。可以使用.noCursorTimeout()來設置遊標的關閉選項,這時就需要手動關閉遊標。
var mycursor = db.emp.find().noCursorTimeout()