游标操作方法
游标(Cursor)迭代与处理方法
语法
db.collection.find(<query>).<cursorMethod>()说明
find() 返回一个游标对象,支持链式调用和多种迭代方法。toArray() 一次性加载全部,forEach() 逐条处理,map() 转换,hasNext()/next() 手动迭代,count() 返回数量。游标默认 10 分钟后超时,可用 noCursorTimeout() 延长。
参数
.toArray()将游标所有文档转为数组
.forEach()遍历每个文档执行回调函数
.map()对每个文档应用映射函数返回新数组
.hasNext()检查游标是否还有下一条文档
.next()返回游标的下一条文档并前移指针
.count()返回游标可返回的文档总数
.hint()强制使用指定索引
.maxTimeMS()设置操作超时时间(毫秒)
.noCursorTimeout()防止游标自动超时关闭
.readConcern()设置读取关注级别
示例
forEach 遍历
逐条打印用户名称
db.users.find().forEach(doc => print(doc.name))map 映射
提取所有用户的 email 列表
db.users.find().map(doc => doc.email)toArray 转数组
一次性获取所有文档到内存
const allUsers = db.users.find().toArray()hasNext/next 手动迭代
逐条处理大结果集
const cursor = db.users.find({ status: "active" })
while (cursor.hasNext()) {
processUser(cursor.next())
}hint 强制索引
指定使用 email 索引
db.users.find({ email: /@gmail/ }).hint({ email: 1 })