MongoDB(15)- 查詢操作里面的游標 cursor


db.collection.find() 方法里面的游標

  • 該方法最后會返回一個 cursor
  • 正常情況下,訪問文檔必須迭代游標

 

重點事項

  • 當調用 find() 函數時,Shell 並不立即查詢數據庫,而是等真正開始獲取結果時才發送查詢請求
  • 游標對象的每個方法幾乎都會返回游標對象本身,這樣可以方便進行鏈式函數的調用
  • 在 MongoDB Shell 中使用游標輸出文檔包含兩種情況,如果不將 find() 函數返回的游標賦值給一個局部變量進行保存,在默認情況下游標會自動迭代 20 次。如果將 find() 函數返回的游標賦值給一個局部變量,則可以使用游標對象提供的函數進行手動迭代。
  • 使用清空后的游標,進行迭代輸出時,顯示的內容為空
  • 游標從創建到被銷毀的整個過程存在的時間,被稱為游標的生命周期,包括游標的創建、使用及銷毀三個階段。當客戶端使用 find() 函數向服務器端發起一次查詢請求時,會在服務器端創建一個游標,然后就可以使用游標函數來操作查詢結果

 

迭代循環游標

直接調用變量

var myCursor = db.users.find( { type: 2 } );

myCursor

 

使用 cursor 的 next() 方法

var myCursor = db.users.find( { type: 2 } );

while (myCursor.hasNext()) {
   print(tojson(myCursor.next()));
}

 

使用 printjson() 代替 print() 方法

var myCursor = db.users.find( { type: 2 } );

while (myCursor.hasNext()) {
   printjson(myCursor.next());
}

 

使用 cursor 的 forEach() 方法

var myCursor =  db.users.find( { type: 2 } );

myCursor.forEach(printjson);

 

使用 pretty() 直接打印

這不香嗎,為什么要用游標還寫代碼,搞不懂搞不懂

> db.inventory.find({item : /^p/}).pretty()

 

常見的游標方法名

方法名 作用
hasNext 判斷是否有更多的文檔
next 用來獲取下一條文檔
toArray 將查詢結構放到數組中
count 查詢的結果為文檔的總數量
limit 限制查詢結果返回數量
skip 跳過指定數目的文檔
sort 對查詢結果進行排序
objsLeftlnBatch 查看當前批次剩余的未被迭代的文檔數量
addOption 為游標設置輔助選項,修改游標的默認行為
hint 為查詢強制使用指定索引
explain 用於獲取查詢執行過程報告
snapshot 對查詢結果使用快照

(后面會對常用的游標方法進行詳解)

 

以下三種情況會讓游標被銷毀

  • 客戶端保存的游標變量不在作用域內。
  • 游標遍歷完成后,或者客戶端主動發送終止消息
  • 在服務器端 10 分鍾內未對游標進行操作

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM