MongoDB CRUD操作:mongosh 游标迭代

MongoDB CRUD操作:mongosh 游标迭代

文章目录

  • MongoDB CRUD操作:mongosh 游标迭代
    • 手动迭代光标
    • 使用数组迭代
    • 游标行为
    • 在会话中打开的游标
    • 在会话之外打开游标
    • 游标隔离
    • 游标批次
    • 光标信息

在mongosh中,执行 db.collection.find()方法会返回一个游标,要访问文档,需要遍历游标。不过,在mongosh中,如果没有使用var关键字将返回的游标赋值给变量,游标默认会自动迭代20次,打印结果中的前20个文档。本文会介绍在mongosh中迭代游标的一些方法,包括手动迭代游标以访问文档或使用迭代器索引的方法。

手动迭代光标

在mongosh中,可以使用var关键字将find()方法返回的游标赋值给一个变量,这样游标就不会自动遍历了。此时,可以在shell中调用游标变量,默认遍历20次,并打印出匹配的文档,如下例所示:

var myCursor = db.users.find( { type: 2 } );myCursor

也可以使用游标的方法next()访问文档,如下例所示:

var myCursor = db.users.find( { type: 2 } );while (myCursor.hasNext()) {print(tojson(myCursor.next()));
}

作为打印操作的替代方法,可以使用printjson()方法来替代print(tojson()),如:

var myCursor = db.users.find( { type: 2 } );while (myCursor.hasNext()) {printjson(myCursor.next());
}

也可以使用游标的forEach()方法遍历游标并访问文档,如下例所示:

var myCursor =  db.users.find( { type: 2 } );myCursor.forEach(printjson);

还可以设置DBQuery.shellBatchSize属性来更改默认值20的遍历文档数。

使用数组迭代

在mongosh中,可以使用toArray()方法遍历游标,并以数组形式返回文档,如下所示:

var myCursor = db.inventory.find( { type: 2 } );
var documentArray = myCursor.toArray();
var myDocument = documentArray[3];

toArray()方法会将游标返回的所有文档加载到内存中,注意toArray()方法可能会耗尽游标。

此外,有些驱动程序通过使用游标上的索引(即cursor[index])来访问文档,就是首先调用toArray()方法,然后在生成的数组上使用索引的方式。

如下面的例子:

var myCursor = db.users.find( { type: 2 } );
var myDocument = myCursor[1];

myCursor[1] 等价于下面的示例:

myCursor.toArray() [1];

游标行为

在会话中打开的游标

从MongoDB 5.0开始,客户端会话中创建的游标会在使用killSessions命令后、会话超时或客户端耗尽游标时关闭。默认情况下,服务器会话的超时时间为30分钟,可以通过在启动mongod时设置localLogicalSessionTimeoutMinutes参数进行修改。

在会话之外打开游标

会话下未打开的游标会在10分钟不活动后或客户端耗尽游标后自动关闭。要在mongosh中阻止此行为,可以使用cursor.noCursorTimeout()方法:

var myCursor = db.users.find().noCursorTimeout();

设置noCursorTimeout选项后,必须使用cursor.close()手动关闭游标,或者通过耗尽游标来闭游标。

游标隔离

当游标返回文档时,其他操作可能会与查询交错进行。

游标批次

MongoDB 服务器会分批返回查询结果,批次中的数据量不会超过BSON文档的最大大小,可以使用batchSize()limit()覆盖默认的批处理大小。find()aggregate()listIndexeslistCollections类型的操作每批最多返回16兆字节。

find()aggregate()操作的默认批次大小为101个文档。针对结果游标发出的后续getMore操作没有默认批量大小,因此它们只受 16 兆字节大小的限制。

对于包含不带索引的排序操作的查询,服务器必须在返回任何结果之前加载内存中的所有文档以执行排序。

当遍历游标并到达返回批次的末尾时,如果还有更多结果,cursor.next()将执行getMore操作以获取下一批结果。要在遍历游标时查看批次中还剩余多少文档,可以使用objsLeftInBatch()方法,如下所示:

var myCursor = db.inventory.find();var myFirstDocument = myCursor.hasNext() ? myCursor.next() : null;myCursor.objsLeftInBatch();

光标信息

db.serverStatus()方法会返回一个包含metrics``字段的文档。metrics字段包含一个metrics.cursor字段,其中包含以下信息:

  • 上次服务器重启后超时的游标数
  • DBQuery.Option.noTimeout选项以防止在一段时间不活动后超时的打开游标数
  • 被持有的打开游标数
  • 打开游标总数

下面的示例调用了db.serverStatus()方法,并访问了结果中的metrics字段,然后又访问了metrics字段中的cursor字段:

db.serverStatus().metrics.cursor

结果为类似下面的文档:

{"timedOut" : <number>"open" : {"noTimeout" : <number>,"pinned" : <number>,"total" : <number>}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/19124.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

速看!!24上软考【电子商务设计师】真题回顾,含答案解析

2024上半年软考考试已经结束了&#xff0c;为大家整理了网友回忆版的电子商务设计师真题及答案&#xff0c;25-26日两批考试总共60道题。 上半年考试的宝子们可以对答案预估分数&#xff01;准备下半年考的宝子可以提前把握考试知识点和出题方向&#xff0c;说不定会遇到相同考…

迭代逆序遍历在Java中的作用与原理

作用 迭代逆序遍历主要用于在需要删除或修改集合中的元素时避免并发修改异常&#xff08;ConcurrentModificationException&#xff09;。正序遍历时&#xff0c;如果在遍历过程中对集合进行结构性修改&#xff08;如删除元素&#xff09;&#xff0c;会导致迭代器抛出并发修改…

C++学习~~对于二进制文件的读写命名空间再认识异常处理

目录 1.将数据以二进制形式放到磁盘 2.将上述的数据读入内存并且显示在显示器上面 3.异常处理机制 4.抛出异常的应用实例 1.将数据以二进制形式放到磁盘 &#xff08;1&#xff09;使用student定义结构体数组stud,并对其进行初始化&#xff0c;创建输出文件流对象outfile,这…

STL库--stack

目录 stack的定义 stack容器内元素的访问 stack常用函数实例解析 stack的常见用途 stack的定义 其定义的写法和其他STL容器相同&#xff0c;typename可以任意基本类型或容器&#xff1a; stack<typename> name; stack容器内元素的访问 由于栈本身就是一种后进先出…

全球市值最高的能源公司沙特阿美股份拟出售,筹集百亿美元

KlipC报道&#xff1a;据5月28日市场消息&#xff0c;沙特政府可能最快会在本周宣布拟出售国营石油公司沙特阿美股份&#xff0c;筹集100亿-200亿美元。 沙特阿美是世界最大的石油生产商&#xff0c;2019年在沙特证交所上市。沙特的经济高度依赖石油出口。此前&#xff0c;受石…

海外推广,投放广告为什么大家都选择Facebook?

广告投放的效果会受到很多因素的影响&#xff0c;包括目标受众、产品类型、投放策略等等。就平台本身而言&#xff0c;Facebook和TikTok在广告投放方面有一些不同之处。 Facebook 是一个历史悠久、用户规模庞大的社交媒体平台&#xff0c;拥有全球各地广泛的用户群体&#xff…

VUE3 学习笔记(8):VUE 组件间传值【父传子、子传父】

父传子值 可以在父组件使用中增加&#xff1a;命名&#xff0c;子组件中通过props:["命名"] 接收的方式进行处理。 支持多种类型&#xff0c;当然也支持传对象、函数、HTML内容&#xff08;后面讲的插槽&#xff09;&#xff0c;也可以通过provide进行跨级透传 props…

【面试】谈谈常见的Java虚拟机有哪些

目录 1. HotSpot JVM2. OpenJ9 JVM3. GraalVM4. JRockit5. Exact VM6. Sun Classic VM7. KVM&#xff08;Kaffe Virtual Machine&#xff09; 1. HotSpot JVM 1.开发商&#xff1a;Oracle公司2.特点&#xff1a;是目前应用最广泛的Java虚拟机实现。它采用了即时编译&#xff0…

论文笔记 Explicit Visual Prompting for Low-Level Structure Segmentations

通俗地解释视觉中的prompt 在视觉中的“prompt”&#xff08;提示&#xff09;可以用一种比较通俗的方式来理解&#xff1a; 什么是视觉中的提示&#xff1f; 想象一下&#xff0c;你有一个已经接受过大量训练的超级助手&#xff08;类似于预训练的模型&#xff09;&#xf…

【IOT】OrangePi+HomeAssistant+Yolov5智能家居融合

前言 本文将以OrangePi AIpro为基础&#xff0c;在此基础构建HomeAssistant、YOLO目标检测实现智能家居更加灵活智能的场景实现。 表头表头设备OrangePi AIpro(8T)系统版本Ubuntu 22.04.4 LTSCPU4核64位处理器 AI处理器AI算力AI算力 8TOPS算力接口HDMI2、GPIO接口、Type-C、M.2…

Web前端与App前端:深入剖析两者的异同

Web前端与App前端&#xff1a;深入剖析两者的异同 在数字化时代&#xff0c;前端技术已成为连接用户与数字世界的桥梁。然而&#xff0c;当我们谈及前端时&#xff0c;往往会遇到两个相似的概念&#xff1a;Web前端和App前端。这两者是否完全相同&#xff0c;还是各有千秋&…

【YOLOv10】2024年5月最新的YOLO系列模型Yolov10(论文阅读笔记) + 完整创新点说明 + 总结

&#x1f680;&#x1f680;&#x1f680; YOLOv10: 实时端到端的目标检测。YOLOv10比最先进的YOLOv9延迟时间更低&#xff0c;测试结果可以与YOLOv9媲美&#xff0c;可能会成为YOLO系列模型部署的“新选择”。 官方论文地址&#xff1a;https://arxiv.org/pdf/2405.14458 官方…

python生成词云图

生成词云图的话需要先对数据进行分词处理 , 分词方法点击查看 import pandas as pd from collections import Counter from wordcloud import WordCloud import matplotlib.pyplot as plt# 假设您已经按照之前的步骤处理了数据&#xff0c;并且处理后的数据保存在comments_proc…

怎么更改图片格式?图片在线转格式的使用方法

现在很多的平台在上传图片的时候&#xff0c;都会有规定要求的大小、格式、尺寸&#xff0c;只有符合要求的图片才可以正常上传。在网上传图时想要快速的修改图片格式&#xff0c;比较简单的一个方法就是在使用在线图片格式转换的工具就能够快速处理&#xff0c;下面将图片转格…

关于微信小程序低功耗蓝牙ECharts实时刷新(涉及自定义缓冲区)

简单的蓝牙显示&#xff08;串口手动发数据测试&#xff09; 最近搞了这方面的东西&#xff0c;是刚刚开始接触微信小程序&#xff0c;因为是刚刚开始接触蓝牙设备&#xff0c;所以这篇文章适合既不熟悉小程序&#xff0c;又不熟悉蓝牙的新手看。 项目要求是获取到蓝牙传输过来…

在线思维导图编辑!3个AI思维导图生成软件推荐!

思维导图&#xff0c;一种以创新为驱动的视觉化思考工具&#xff0c;已经渗透到我们日常生活和工作的各个角落。当我们需要整理思绪、规划项目或者梳理信息时&#xff0c;思维导图总能提供极大的帮助。 近些年随着云服务等基础设施的完善&#xff0c;我们可以看到越来越多提供…

Spring Bean Map之舞

1. 引言 在Spring框架中&#xff0c;Bean的生命周期管理是其核心功能之一。当Spring容器启动时&#xff0c;它会根据配置信息&#xff08;如XML配置文件、注解等&#xff09;来创建和管理Bean实例。这些Bean实例默认会被放置在一个Map数据结构中&#xff0c;以便容器能够快速地…

ITIL4认证考试这么贵,还值得考证吗,有必要学吗?

从2023年4月1日开始&#xff0c;ITIL 4是Foundation认证将会捆绑OTM(Official Training Materials),这样在一次ITIL4的考试费中将会捆绑&#xff1a;试卷费电子教材书费监考费OTM费&#xff0c;每一种考试费都相较于2022年有涨幅&#xff0c;再加上PeopleCert收取的授权机构的授…

angular HTTP拦截器阻止请求继续进行并中断请求链

在Angular的HTTP拦截器中&#xff0c;如果你希望在特定条件下阻止请求继续进行并中断请求链&#xff0c;直接返回 false 实际上不会达到预期效果。Angular的HTTP拦截器期望拦截器方法 intercept 返回一个 Observable<HttpEvent<any>>。如果你想要中断请求&#xff…

[英语单词] meltdown 熔断

意思就是和保险丝一样&#xff0c;熔断之后&#xff0c;就出现了断点&#xff0c;断网之类的事情。 RFC 2914 3.1. Preventing congestion collapse. The Internet protocol architecture is based on a connectionless end-to-end packet service using the IP protocol. The …