MongoDB游标

MongoDB游标

MongoDB 的游标相当于 Python 中的迭代器,通过将查询结构定义给一个变量,这个变量就是游标,通过这个游标,我们可以每次获取一个数据。

MongoDB 中 find() 函数返回一个游标,客户端通过对游标进行一些设置就能对查询结果进行有效地控制,如可以限制查询得到的结果数量、跳过部分结果、或对结果集按任意键进行排序等!

MongoDB游标使用说明

MongoDB 中的游标与关系型数据库中的游标在功能上大同小异。游标相当于 C 语言 的指针,可以定位到某条记录,在 MongoDB 中,则是文档。因此在 MongoDB 中游标也有定义,声明, 打开,读取,关闭这么个过程。客户端通过游标,能够实现对最终结果进行有效的控制,诸如限制结果数量,跳过部分结果或根据任意键按任意顺序的组合对结果进行各种排序等。

通俗的说,游标不是查询结果,可以理解为数据在遍历过程中的内部指针,其返回的是一个资源,或者说数据读取接口。

客户端通过对游标进行一些设置就能对查询结果进行有效地控制,如可以限制查询得到的结果数量、跳过部分结果、或对结果集按任意键进行排序等!

直接对一个集合调用 find() 方法时,我们会发现,如果查询结果超过二十条,只会返回二十条的结果,这是因为 Mongodb 会自动递归 find() 返回的游标。

MongoDB游标操作

操作 语法
hasNext 判断是否还有更多的文档
next 用来获取下一条文档
toArray 将查询结果放到数组中
count 获取结果集中总的文档数量
limit 限制结果返回数量
skip 跳过指定数目的文档
sort 对查询结果进行排序
objsLeftInBatch 查看当前批次剩余的未被迭代的文档数量
addOption 为游标设置辅助选项,修改游标的默认行为
hint 为查询强制使用指定索引
explain 用于获取查询执行过程报告
snapshot 对查询结果使用快照

游标生命周期

  1. 游标完成匹配结果的迭代后,它会清除自身;
  2. 客户端的游标已经不在作用域内,驱动程序回向服务器发送一条特别的消息,让其销毁;
  3. 缺省情况下,游标在十分钟内没有使用,游标自动关闭或者客户端已经迭代完整个游标;
  4. 可以通过 cursor.noCursorTimeout() 来定义游标超时时间,比如:
var myCursor = db.users.find().noCursorTimeout()
  1. 对于自定义超时时长的游标可以使用 cursor.close() 来关闭游标,比如:
db.collection.find(<query>).close()

MongoDB游标总结

MongoDB 的游标相当于 Python 中的迭代器,通过将查询结构定义给一个变量,这个变量就是游标,通过这个游标,我们可以每次获取一个数据。

MongoDB 中 find() 函数返回一个游标,客户端通过对游标进行一些设置就能对查询结果进行有效地控制,如可以限制查询得到的结果数量、跳过部分结果、或对结果集按任意键进行排序等!