跳到主要内容

游标

2025年02月25日
柏拉文
越努力,越幸运

前言


游标命令

一、cursor.addOption()


1.1 认识

cursor.addOption() 添加可修改查询行为的特殊传输协议标记。

1.2 语法

1.3 用法

二、cursor.allowDiskUse()


2.1 认识

cursor.allowDiskUse() 允许 MongoDB 在处理阻塞排序操作时使用磁盘上的临时文件来存储超过 100 MB 系统内存限制的数据。

2.2 语法

2.3 用法

三、cursor.allowPartialResults()


3.1 认识

cursor.allowPartialResults() 如果一个或多个查询的分片不可用,则允许对分片集合进行 db.collection.find() 操作,以返回部分结果,而不是错误。

3.2 语法

3.3 用法

四、cursor.batchSize()


4.1 认识

cursor.batchSize() 控制 MongoDB 将在单个网络消息中返回到客户端的文档数量。

4.2 语法

4.3 用法

五、cursor.close()


5.1 认识

cursor.close() 关闭游标并释放关联的服务器资源。

5.2 语法

5.3 用法

六、cursor.isClosed()


6.1 认识

cursor.isClosed() 如果游标关闭,则返回 true。

6.2 语法

6.3 用法

七、cursor.collation()


7.1 认识

cursor.collation() 指定 db.collection.find() 返回的游标的排序规则。

7.2 语法

7.3 用法

八、cursor.comment()


8.1 认识

cursor.comment() 将注释附加到查询,以允许在日志和 system.profile 集合中进行跟踪。

8.2 语法

8.3 用法

九、cursor.count()


9.1 认识

cursor.count() 修改游标,以返回结果集中的文档数量,而不是文档本身。当您在未指定查询谓词的 find() 操作上调用 count() 时,count() 方法可能会返回不准确的文档数。这些 count() 方法会根据集合的元数据返回结果,这可能会得出近似的计数。在分片集群上,所产生的计数将无法正确剔除孤立文档。在非正常关闭或基于文件副本的初始同步后,计数可能不正确。

9.2 语法

db.collection.find(<query>).count(applySkipLimit)
  • applySkipLimit: 可选。 mongosh 会忽略为此选项设立的任何值。 该值默认为 true 。该选项指定是否考虑 cursor.skip()cursor.limit() 方法在计数中的影响。默认下,count() 方法会忽略 cursor.skip()cursor.limit() 的影响。您必须将 applySkipLimit 设立为 true 才能考虑这些方法的效果。

9.3 用法

十、cursor.explain()


10.1 认识

cursor.explain() 报告游标的查询执行计划。

10.2 语法

10.3 用法

十一、cursor.forEach()


11.1 认识

cursor.forEach() 对游标中的每个文档应用 JavaScript 函数。

11.2 语法

db.collection.find().forEach( <function> );

11.3 用法

const cursor = db.user.find({ age: { $lt: 100 }});

cursor.forEach(printjson);

十二、cursor.hasNext()


12.1 认识

cursor.hasNext() 如果游标包含文档且可迭代,则返回 true

12.2 语法

db.collection.find().hasNext();

12.3 用法

基于 next() 遍历游标: 通过 hasNext() 查询返回的游标可以进一步迭代, 如果可以, 使用游标方法 next() 访问文档

const cursor = db.user.find({ age: { $lt: 100 }});

while(cursor.hasNext()){ printjson(cursor.next()); };

十三、cursor.hint()


13.1 认识

cursor.hint() 强制 MongoDB 对查询使用特定索引。

13.2 语法

13.3 用法

十四、cursor.isExhausted()


14.1 认识

cursor.isExhausted() 如果游标已关闭且批处理中没有剩余对象,则返回 true。

14.2 语法

14.3 用法

十五、cursor.itcount()


15.1 认识

cursor.itcount() 通过获取和迭代结果集,计算游标客户端中的文档总数。

15.2 语法

15.3 用法

十六、cursor.limit()


16.1 认识

cursor.limit() 限制游标结果集的大小。

16.2 语法

db.collection.find(<query>).limit(<number>)

16.3 用法

const cursor = db.user.find({ age: { $lt: 100 }});
cursor.limit(2);

十七、cursor.map()


17.1 认识

cursor.map() 将函数应用于游标中的每个文档,并收集数组中的返回值。

17.2 语法

17.3 用法

十八、cursor.max()


18.1 认识

cursor.max() 指定游标的独占索引上限。与 cursor.hint() 结合使用。

18.2 语法

18.3 用法

十九、cursor.maxAwaitTimeMS()


19.1 认识

cursor.maxAwaitTimeMS() 指定等待下一查询结果更新的时间限制(以毫秒为单位)。

19.2 语法

19.3 用法

二十、cursor.maxTimeMS()


20.1 认识

cursor.maxTimeMS() 指定在游标上处理操作的累计时间限制(以毫秒为单位)。

20.2 语法

20.3 用法

二十一、cursor.min()


21.1 认识

cursor.min() 指定游标的包含式索引下限。与 cursor.hint() 结合使用。

21.2 语法

21.3 用法

二十二、cursor.next()


22.1 认识

cursor.next() 返回游标中的下一个文档。

22.2 语法

db.collection.find().cursor.next();

22.3 用法

基于 next() 遍历游标: 通过 hasNext() 查询返回的游标可以进一步迭代, 如果可以, 使用游标方法 next() 访问文档

const cursor = db.user.find({ age: { $lt: 100 }});

while(cursor.hasNext()){ printjson(cursor.next()); };

二十三、cursor.noCursorTimeout()


23.1 认识

cursor.noCursorTimeout() 指示服务器避免在一段时间不活动后自动关闭游标。

23.2 语法

23.3 用法

二十四、cursor.objsLeftInBatch()


24.1 认识

cursor.objsLeftInBatch() 返回当前游标批处理中剩余文档的数量。

24.2 语法

24.3 用法

二十五、cursor.pretty()


25.1 认识

cursor.pretty() 将游标配置为以易于阅读的格式显示结果。

25.2 语法

25.3 用法

二十六、cursor.readConcern()


26.1 认识

cursor.readConcern() 为 find() 操作指定读关注。

26.2 语法

26.3 用法

二十七、cursor.readPref()


27.1 认识

cursor.readPref() 为游标指定读取偏好,以控制客户端如何将查询定向到副本集。

27.2 语法

27.3 用法

二十八、cursor.returnKey()


28.1 认识

cursor.returnKey() 修改游标以返回索引键而不是文档。

28.2 语法

28.3 用法

二十九、cursor.showRecordId()


29.1 认识

cursor.showRecordId() 向游标返回的每个文档添加内部存储引擎 ID 字段。

29.2 语法

29.3 用法

三十、cursor.size()


30.1 认识

cursor.size() 应用 skip()limit() 方法后,返回游标中文档的计数。

30.2 语法

30.3 用法

三十一、cursor.skip()


31.1 认识

cursor.skip() 返回一个游标,该游标仅在传递或跳过多个文档后才开始返回结果。cursor.skip 永远在 cursor.limit 之前执行, 先截取, 后限制。

31.2 语法

db.collection.find(<query>).skip(offset);
  • offset: 结果集中要跳过的文档数。

31.3 用法

三十二、cursor.sort()


32.1 认识

cursor.sort() 根据排序规范返回排序的结果。cursor.sort 永远在 cursor.skip()cursor.limit() 之前执行。

32.2 语法

db.collection.find().sort(<sort>);
  • sort: 文档, 定义结果集排序顺序的文档。

32.3 用法

db.user.find({ age: { $lt: 100 }}).sort();

db.user.find({ age: { $lt: 100 }}).sort({ age: 1, name: 1 }); // 1 为由低到高, -1 为由高到低

三十三、cursor.tailable()


33.1 认识

cursor.tailable() 将游标标记为循环式。仅对超过固定大小集合的游标有效。

33.2 语法

33.3 用法

三十四、cursor.toArray()


34.1 认识

cursor.toArray() 返回一个数组,其中包含游标返回的所有文档。

34.2 语法

34.3 用法

三十五、cursor.tryNext()


35.1 认识

cursor.tryNext() 返回迭代中的下一个元素(如果有),否则返回 null。

35.2 语法

35.3 用法