mongodb:遊標

遍歷完遊標中所有文檔之後,或者10分鐘之後,遊標便會自動關閉,可以使用 noCursorTimeout() 函數來保持遊標一直有效,之後不遍歷遊標的情況下你需要主動關閉遊標 close()

var myCursor = db.accounts.find().noCursorTimeout()
myCursor.close()

遊標函數

  • cursor.hasNext() 是否有下一個
  • cursor.next() 下一個
var myCursor = db.accounts.find({ name: "george" })
while( myCursor.hasNext() ) {
	printjson(myCursor.next())
}
  • cursor.forEach() 遍歷
var myCursor = db.accounts.find({ name: "george" })
myCursor.forEach(printjson)
  • cursor.limit() 傳入數字 n,代表只輸出 n 個文檔,傳入 0 相當於 limit 失效,數據全量返回。
  • cursor.skip() 傳入數字 n,代表跳過 n 個文檔,輸出別的
// 本來輸出很多,現在只輸出前兩個
db.accounts.find({ name: "george" }).limit(2)
// 跳過第一個,從第二個開始輸出
db.accounts.find({ name: "george" }).limit(1)

執行順序:sort > skip > limit
執行時無論順序怎麼寫,也先按這個順序執行,所以爲了不出現歧義,如果三個同時存在的時候要按順序寫

  • cursor.count() 計數,參數默認爲 false,表示忽略limit和skip的效果
// 比如本來有 3 個,使用 limit(2) 輸出 2 個文檔,使用 count() 輸出 3
db.accounts.find({ name: "george" }).limit(2).count()
// 輸出 2
db.accounts.find({ name: "george" }).limit(2).count(true)
  • cursor.sort() 排序,參數 1(正序) 或 -1(倒序)
// 餘額倒序,姓名正序
db.accounts.find().sort({
	balance: -1,
	name: 1
})
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章