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
})
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章