rmdir.cn

游标操作方法

游标(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 })