一、什么是游标?
游标(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()