本页介绍 MongoDB 8.0中引入的更改和新功能。
MongoDB 8.0是一个主要版本,这意味着MongoDB Atlas和本地部署部署均支持该版本。 MongoDB 8.0包括MongoDB快速版本7.1 、 7.2和7.3中引入的更改。 本页介绍了这些快速发布和MongoDB 8中引入的更改。 0 。
如果启用了Latest Release (auto-upgrades) 选项,MongoDB Atlas会为专用集群 (M10+) 自动升级到主要版本。如果您想手动升级您的 MongoDB Atlas,请参阅 将集群升级到新的 MongoDB 版本,要学习有关 Atlas 中 MongoDB 集群版本的更多信息,请参阅 Atlas 集群使用哪些版本的 MongoDB
要详细学习;了解主要版本和快速版本之间的差异,请参阅 MongoDB版本控制。
警告
过去的版本限制
以下关键公告会影响某些先前的 MongoDB 版本。如果您的部署依赖于受关键公告影响的功能,请升级到最新的可用补丁版本。
问题 | 受影响的版本 |
|---|---|
8.0.0 - 8.0.3 | |
8.0.0 - 8.0.3 |
补丁版本
8.0.17- 2025 年 12 月 19 日
重要
MongoDB 8.0.17包含CVE-2025-14847 的修复。
有关MongoDB安全更新的最新信息,请参阅MongoDB安全公告。
修复的问题:
SERVER-115508 :为未压缩消息创建最小大小的缓冲区
8.0.16 - 2025 年 11月 19 日
修复的问题:
服务器-82688:修复当连接数超过 WiredTiger 的
session_max限制时导致mongod崩溃的错误SERVER-95374:解决了复合通配符索引在联合或查询规划期间可能错误下推谓词的问题
服务器-103960:对字段路径(Field Path)实现适当的验证检查,确保各部分的数量不超过
255SERVER-108565:改进对时间序列集合超大写入的处理。
SERVER-112467:改进对待处理代理连接数量的跟踪和报告
SERVER-112520:修复了将文档插入时间序列集合中的现有存储桶时无法写入地理索引的问题
WT-9575:修复了更新晚于最早ACID 事务ID的页面未排队等待逐出的问题
WT-15225:修复了新建表和
drop()操作的EBUSY问题
8.0.15 - 2025 年 10 月 2 日
重要
MongoDB 服务器查询规划器中的释放后使用可能会导致崩溃或未定义的行为。
说明:授权用户可能会导致缓冲区过度读取,从而导致MongoDB 服务器崩溃。在查询运行时运行DDL 操作时,可能会出现这种情况。
CVSS 分数:5.3
CWE:416 释放后使用
受影响的产品版本: MongoDB Server 8.2.0、8.0.14 至 8.0、7.0.24 至 7.0 以及更早的已结束生命周期的主要版本。
修复的问题:
服务器-105873:QueryPlannerParams 不应维护 IndexCatalogEntry 拥有的指针
8.0.14 - 2025 年 9 月 25 日
修复的问题:
SERVER-100448:初创企业时命令注册不应依赖于FCV
SERVER-103742:opWriteConcernCounters 可以将 NUL 字节非法嵌入 ServerStatus
SERVER-103841:TransactionCoordinator 中与长期取消源相关的内存泄漏
SERVER-105478:使用 secondaryDelaySecs 分隔应用程序符合条件和不符合条件的oplog条目
WT-14140:对未扫描的活动“ 文件 :” dhandle 采取了不必要的模式锁
WT-14653:将日志/统计信息添加到对帐中以跟踪 HS 更新
8.0.13 - 21 8 月, 2025
修复的问题:
SERVER-77172:如果无法签出会话,
abortExpiredTransactions线程可能会卡住SERVER-82180:主节点 (primary node in the replica set)上的固定大小插入可以具有与从节点上不同的自然顺序
SERVER-91686:改进
mongod信号处理程序以打印出当前线程的命令对象SERVER-94315:使用排序规则的分片筛选错误
SERVER-102670:不正确的有序时间序列插入错误处理
SERVER-107361:存储桶目录中的滚动确定可能无法检查混合模式的大型测量值
8.0.12 - 7 月 23、2025
重要
由于 CVE-2025-10061,在 8.0.12 之前的 MongoDB 8.0 中,授权用户可以通过特制的 $group 查询导致 MongoDB Server 崩溃。该漏洞与在 $ 群组操作中指定其他参数时某些累加器函数的错误处理有关。如果重复触发,此漏洞可能会导致拒绝服务。
此问题会影响以下 MongoDB Server 版本:
8.1.0 - 8.1.1
8.0.0 - 8.0.11
7.0.0 - 7.0.21
6.0.0 - 6.0.24
CVSS 分数:6.5
CWE:CWE-20 输入验证不正确
修复的问题:
SERVER-95523: 更新或插入(upsert)无法正确处理DuplicateKey 重试
SERVER-95524:避免在多文档事务中因更新或插入操作出现重复键错误而重试
SERVER-97368:对包含 1970之前的数据的时间序列集合启用TTL删除
SERVER-99342:未更新吞吐量探测减少指标
SERVER-99616 $ 群组 can Hit MONGO_verify
WT-14391:打开 HS 之前检查逐出服务器是否正在运行
8.0.11 - 30 6 月, 2025
修复的问题:
SERVER-105375:对 elemMatch 中的 alwaysFalse 表达式使用 EOF 计划
SERVER-106614:对于 8之前添加的分片,未更新 config.shards 条目中的副本集主机列表。0
8.0.10 - 04 6 月, 2025
重要
格式不正确的 KMIP 响应可能会导致读取访问权限冲突
由于 CVE-2025-12657,在 8.0.10 之前的 MongoDB 8.0 中,mongo 构建中内置的 KMIP 响应解析器对某些格式错误的数据包容忍度过高,可能会将其解析为无效对象。稍后读取此对象可能会导致读取访问权限冲突。
此问题会影响以下 MongoDB Server 版本:
8.0.0 - 8.0.9
7.0.0 - 7.0.21
CVSS 分数:5.9
CWE:CWE-754:对异常或异常情况的不当检查
修复的问题:
SERVER-101230:Coverity 分析缺陷 155126:使用无效的迭代器
SERVER-90495:支持在自然顺序扫描中从已删除的 recordId 开始或恢复
SERVER-92806:计划缓存条目忽略与 $elemMatch 的索引排序规则
SERVER-96197:ExpressionContext 的 _resolvedNamespaces 无法区分不同数据库中具有相同名称的集合
SERVER-100785:发出格式错误的 reshardCollection 命令后, MongoDB配置服务器致命崩溃
WT-13216:评估压缩中缓存逐出检查的使用
8.0.9 - 5 月1 、 2025
重要
修复了对不完整数据的错误处理可能会阻止mongos接受新连接的问题
由于 CVE-2025-6714,在 8.0.9 之前的MongoDB 8.0 中,由于对不完整数据的错误处理, MongoDB Server 的 mongos 组件可能会对新连接无响应。此问题会影响分片的MongoDB集群,这些集群配置了对在指定端口上使用 HAProxy 的 mongos 的负载负载均衡器支持。
此问题会影响以下 MongoDB Server 版本:
8.0.0 - 8.0.8
7.0.0 - 7.0.19
6.0.0 - 6.0.22
CVSS 分数:7.5
CWE:CWE-834 过度迭代和 CWE-400 不受控制的资源消耗
修复的问题:
SERVER-92236:数据段迁移应使用短期取消源
SERVER-106753:对不完整数据的错误处理可能会阻止
mongos接受新连接
8.0.8 - 4 月14 、 2025
修复的问题:
SERVER-103328 在双精度类型的非零 RLE 之后跳过的 BSONColumn 处理不正确
8.0.7 - 4 月14 、 2025
重要
由于 $mergeCursors 阶段, MongoDB Server可能容易受到权限的影响
由于 CVE-2025-6713,在 8.0.7 之前的MongoDB 8.0 中,由于对 $mergeCursors 阶段的处理不当,未经授权的用户可能会在未经适当授权的情况下利用特制的聚合管道访问权限数据。 MongoDB Server。这可能会导致在未经进一步授权的情况下访问权限数据。
此问题会影响以下 MongoDB Server 版本:
8.0.0 - 8.0.6
7.0.0 - 7.0.18
6.0.0 - 6.0.21
CVSS 分数:7.7
CWE:CWE-285:授权不当
修复的问题:
SERVER-106752 MongoDB Server可能容易因
$mergeCursors阶段而受到权限的影响
8.0.6 - 2025 年 3 月 18 日
修复的问题:
SERVER-87442 平台支持:添加对 Macos 14 sonoma(ARM64 和 AMD64)的支持
SERVER-89757 checkSbeStatus 应检查所有节点
SERVER-97911 Query with "_id in empty 大量 " 在给定_id索引作为提示时遍历完整集合
SERVER-100901 将用户摘要不变量放宽为 ShardingTaskExecutor 中的 tassert
SERVER-101838 Revert SERVER-93101 + SERVER-91121
8.0.5 - 2 月20 、 2025
重要
MongoDB Server 的 OIDC 身份验证中的预身份验证拒绝服务漏洞
由于 CVE-2025-6709,在 8.0.5 之前的MongoDB 8.0 中,由于使用 OIDC身份验证时对JSON输入中的特定日期值处理不当, MongoDB Server容易受到拒绝服务漏洞的影响。可以使用Mongo Shell重现此问题,发送恶意JSON有效负载,从而导致不变量故障和服务器崩溃。
此问题会影响以下 MongoDB Server 版本:
8.0.0 - 8.0.4
7.0.0 - 7.0.16
同样的问题也会影响MongoDB Server v6.0,但攻击者只能在进行身份验证后引发拒绝服务。此问题会影响以下MongoDB Server版本:
6.0.0 - 6.0.20
CVSS 分数:7.5
CWE:CWE-20:输入验证不正确
重要
通过MongoDB中的过度递归导致JSON解析中的预身份验证拒绝服务Stack Overflow漏洞
由于 CVE-2025-6710,在 8.0.5 之前的MongoDB 8.0 中,由于JSON解析机制, MongoDB Server可能容易受到Stack Overflow 的影响,其中特制的JSON输入可能会引发不必要的递归级别,从而导致堆栈空间消耗过多。 此类输入可能会导致Stack Overflow,从而导致服务器崩溃,而这可能会在预授权时发生。
此问题会影响以下 MongoDB Server 版本:
8.0.0 - 8.0.4
7.0.0 - 7.0.16
同样的问题也会影响MongoDB Server v6.0,但攻击者只能在进行身份验证后引发拒绝服务。此问题会影响以下MongoDB Server版本:
6.0.0 - 6.0.20
CVSS 分数:7.5
CWE:CWE-674:不受控制的递归
修复的问题:
SERVER-51366 配置安装程序创建的文件夹
SERVER-93497 将用户缓存失效从 OpObserver 移至 onCommit 处理程序
SERVER-95672 包含子数组的大量字段上的索引不包含某些结果
SERVER-97044 修复以下问题:在对正在使用区域分片的集合进行重新分片或取消分片期间,变更流可能会错误地输出“删除”事件
SERVER-97860 扫描唯一的多字段索引时,Express路径可能会返回不正确的结果
SERVER-99290 无效的时间序列存储桶集合会阻止FCV 8 完成。0升级
SERVER-99345 防止在FCV8 上对没有“timeseries”选项的时间序列集合分片/移动。0 +
SERVER-106748 接受 OIDC身份验证时预身份验证拒绝服务
通过MongoDB中的过度递归导致JSON解析中的 SERVER- 预身份验证拒绝服务Stack Overflow漏洞106749
WT-12846 修复压缩遍历如何处理来自检查点flush_lock 的 EBUSY
8.0.4- 2024 年 12 月 9 日
SERVER-73641 分分片的,时间序列筛选可能会遗漏扩展范围的事件
SERVER-82037 排序器溢出使用的内存可以无限增长
SERVER-94559 时间序列测量删除更新桶的 minTime
SERVER-95067 时间序列插入可以生成引用同一存储桶的多个批处理
SERVER-95724 ReshardingOplogSessionApplication 使用管理员克隆可重试 applyOps 会话信息。 $cmdas受影响的命名空间
8.0.3 - 2024 年 10 月 24 日
重要
对空字节的不正确中和可能会导致MongoDB Server中的缓冲区过度读取
在MongoDB 8.0 和 8.0.1 中,授权用户可能会发出经特殊设计的请求,在MongoDB Server中构造格式错误的BSON ,从而触发崩溃或接收服务器内存缓冲区过度读取的内容。
此问题会影响MongoDB Server版本:
5.0.0 - 5.0.29
6.0.0 - 6.0.18
7.0.0 - 7.0.14
8.0.0 - 8.0.1
修复的问题:
SERVER-96419 不正确的空字节中和可能会导致MongoDB Server中的缓冲区过度读取
8.0.1 - 2024 年 10 月 9 日
修复的问题:
SERVER-76883 减少外部用户的“角色不存在”日志的干扰
SERVER-82221 ListCollections 和 ListIndexes 应包含待提交的命名空间
SERVER-94635 使会话刷新参数可配置
当客户端直接连接到分片,导致插入的 SERVER-95244 Upsert 语句可能会失败,并显示 tassert9146500
WT-13409 __txn_checkpoint 中的一个 ret 未处理
8.0.0 - 2024 年 10 月 2 日
本页的其余部分介绍了MongoDB 8.0中引入的更改和新功能。
性能改进
MongoDB 8.0 引入了较MongoDB 7.0 显着的性能改进,包括但不限于:
读取吞吐量提高高达 36%。
典型 Web 应用程序的性能提高高达 32%。
复制期间并发写入速度提高高达 20%。
注意
性能提升的幅度可能会有所不同,具体取决于工作负载和数据库实例的配置。
新的批量写入命令
从 MongoDB 8.0 开始,可以使用新的 bulkWrite 命令在一个请求中对多个集合执行很多插入、更新和删除操作。现有的 db.collection.bulkWrite() 方法只允许在一个请求中修改一个集合。
bulkWrite MongoDB 8.0 上的批量写入操作的运行速度比MongoDB 7.0 上的批量写入运行快达 56%。
时间序列区块处理
从版本 8.0 开始,MongoDB 可以使用块处理来执行某些时间序列查询。这一性能改进利用数据“块”而不是单个值来处理查询。当使用时间序列集合时,块处理可提高查询执行速度和吞吐量。
与在 MongoDB 7.0 或更早版本上运行的时间序列查询相比,MongoDB 8.0 中的时间序列数据的块处理可以处理更大数据量,并且在某些情况下,$group 操作和分析查询的吞吐量可能提高超过 200%。
要查看时间序列查询是否使用块处理,请检查解释计划输出中的 explain.queryPlanner.winningPlan.slotBasedPlan.stages 字段。
要了解更多信息,请参阅块处理。
平台支持更新
从 MongoDB 8.0 开始,新的 MongoDB Server 版本(主要版本和次要版本)支持操作系统(OS)供应商定义的最低操作系统次要版本。当操作系统供应商不再支持某个操作系统次要版本之后,MongoDB 会更新 MongoDB Server,以支持下一个操作系统次要版本。有关详细信息,请参阅 MongoDB 平台支持改进。
MongoDB 8.0 支持以下最低操作系统次要版本:
Red Hat Enterprise Linux 8.8
Red Hat Enterprise Linux 9.3
SUSE Linux Enterprise Server 15 SP5
Amazon Linux 2023 版本 2023.3
日志记录
从 MongoDB 8.0 开始,可以配置数据库分析器,以根据 MongoDB 处理慢操作时花费的时间(而不是慢操作的总延迟)来记录慢操作。这意味着等待锁和流量控制等因素不会影响操作是否超过慢操作阈值。
这一更改为日志记录和查询分析提供了以下改进:
根据 MongoDB 处理查询时花费的时间,可以更准确地记录慢查询。
查询分析工具(例如 Query Profiler、Performance Advisor 和 Search Query Telemetry)会根据
workingMillis而不是durationMillis报告缓慢的操作。这一变更可以更准确地查看有问题的查询。慢查询日志包含一个指标
queues.execution.totalTimeQueuedMicros,用于衡量在执行工单上排队的时间。此指标可以帮助确定一项操作之所以缓慢,是因为它需要一些时间完成,还是因为它需要一些时间等待启动。
有关更多信息,请参阅 db.setProfilingLevel()。
数据库分析器
为数据库分析器指定过滤器时,可以根据新的 workingMillis 指标记录操作。可以根据 workingMillis 和 durationMillis 记录操作,并将每个指标设置为不同的阈值。
聚合(Aggregation)
BinData 转换
从 MongoDB 8.0 开始,可以使用 $convert 操作符执行以下转换:
字符串值转换为 binData 值
binData 值转换为字符串值
MongoDB 8.0还包括一个新的辅助表达式$toUUID ,它提供了将字符串转换为 UUID值的简化语法。
$queryStats
从MongoDB 7.1开始, $queryStats阶段会返回已记录查询的统计信息。
变更流改进
从 MongoDB 8.0 开始,$queryStats 改进了变更流的跟踪和报告指标。有关更多信息,请参阅 $queryStats 变更流行为。
$rank 和 $denseRank 行为
从 MongoDB 8.0 开始,当计算排名时,null 与 $denseRank 和 $rank sortBy 操作中的缺失字段值将被同等对待。这一更改将使 denseRank 和 rank 的行为与 $sort 一致。
安全性
可查询加密范围查询
从 MongoDB 8.0 开始,可查询加密支持使用 $lt、$lte、$gt 和 $gte 操作符对加密字段执行范围查询。有关详细信息,请参阅可查询加密支持的操作。要允许对加密字段执行范围查询,请参阅创建加密模式。
日志消息的 OCSF 模式
从 MongoDB 8.0 开始,可以为审核日志消息指定 OCSF 模式。OCSF 模式以与日志处理器兼容的标准化格式提供日志。
要设置用于日志消息的模式,请使用 auditLog.schema 配置文件选项。
有关 OCSF 格式的日志消息的示例,请参阅 OCSF 模式审核消息。
入口队列
MongoDB 8.0 引入了用于入口准入控制的新队列。等待从网络进入数据库的操作会进入入口队列。默认下,队列是不受限制的,这意味着MongoDB允许所有操作通过此阶段执行,而无需任何排队。将队列最大值设置为特定值可让您在并发操作数达到指定限制时在此阶段对操作进行排队。
分片
从MongoDB 8.0 开始,您可以对集合取消分片,并在分片集群上的分片之间移动未分片分片的。
移动集合
从 MongoDB 8.0 开始,可以使用 moveCollection 命令将未分片集合移到不同的分片中。
有关详细信息,请参阅可移动集合。 要开始使用,请参阅移动集合。
移动具有变更流的集合
从MongoDB8.0 开始,movePrimary 不会使具有 变更流 的 事件集合 失效。在将集合移动到新的分片后,变更流可以继续从集合中读取事件。
有关详细信息,请参阅Change Streams。
对集合取消分片
从MongoDB 8.0开始,您可以使用unshardCollection命令或sh.unshardCollection()方法对现有分分片的集合取消分片。 此操作将集合中的所有文档移动到指定的分分片或分片量最少的分片上。
配置分片
从MongoDB 8.0开始,您可以配置配置服务器来存储除通常的分分片集群元数据数据之外的应用程序数据。 同时提供配置服务器和分片服务器功能的mongod节点称为配置分片。 作为不带分分片服务器功能的独立运行--configsvr运行的mongod节点称为专用配置服务器。
要将专用配置服务器配置为作为配置分片运行,请运行transitionFromDedicatedConfigServer命令。
要将配置分片配置为作为专用配置服务器分片,请运行transitionToDedicatedConfigServer命令。
有关详细信息,请参阅配置分片。要开始使用,请参阅使用配置分片启动分片集群。要将副本集转换为具有配置分片片的分片分片集群,请参阅使用嵌入式配置服务器将副本集转换为分片集群。
新的数据库命令
新的 mongosh 方法
serverStatus 指标
从MongoDB 8.0开始, serverStatus在其输出中包含以下新的shardingStatistics字段:
shardingStatistics.countTransitionToDedicatedConfigServerStartedshardingStatistics.countTransitionToDedicatedConfigServerCompletedshardingStatistics.countTransitionFromDedicatedConfigServerCompleted
MongoDB 7.1包含以下针对数据数据块迁移的新分片统计信息:
每个分片的默认数据段
从 MongoDB 7.2 开始,当您使用哈希分片键对collection进行分片时,该操作默认为每个分片创建一个数据块。Previously, the operation created two chunks by default.
directShardOperations 角色
从MongoDB 8.0开始,您可以使用directShardOperations角色执行需要直接对分片执行命令的分片操作。
警告
使用directShardOperations角色运行命令可能会导致集群停止正常工作,并可能导致数据损坏。 仅将directShardOperations角色用于维护目的或在MongoDB支持的指导下使用。 执行完维护操作后,请停止使用directShardOperations角色。
dbhash 可直接在分片集群中的节点上运行
从MongoDB 8.0.5 开始,您可以直接在分片上运行dbHash。有关节点直接命令的完整列表,请参阅分片节点直接命令。
为分片集群启用排出游标
从MongoDB7.1 开始,当客户端的mongos getMore 请求设置 exhaustAllowed 标志时, 支持耗尽游标。当客户端收到数据库服务器针对单个请求的多个回复时,这可以提高分分片的集群上的查询性能。
mongos端口范围
从MongoDB 7.1开始, mongos接受来自 [ 0 , 65535 ] 的--port值。 有关更多信息,请参阅--port 。
使用部分分片键进行查询
从 MongoDB 7.1开始, findAndModify和deleteOne()可以使用部分分片键来查询分片集合。
重新分片改进
MongoDB 8.0 在重新分片操作中引入了显着的性能改进,从而大幅减少了操作运行所需的时间。
此外,如果您的应用程序和集群满足必要的要求和限制,则可以使用reshardCollection命令对同一键上的collection重新分片,从而重新分发您的collection,这比备用范围迁移过程要快得多。
命令中添加了以下选项:
字段 | 说明 |
|---|---|
| 启用同键重新分片。 |
有关示例,请参阅将数据重新分发到新分片。
分片集群的自管理备份
从 MongoDB 7.1开始, fsync和fsyncUnlock命令可以对分片集群执行 fsync 操作。
当在mongos上运行且lock字段设立为true时, fsync命令会将写入操作从存储层刷新到磁盘并锁定每个分分片,从而阻止其他写入操作。 然后可以使用fsyncUnlock命令解锁集群。
此功能支持使用mongodump进行分分片的集群的自我管理备份。
分片集合上的更新或插入(upsert)或插入行为
从MongoDB 7.1开始,在分分片的集合上使用updateOne()和upsert: true时,您不需要在过滤中包含完整的分分片键。
具有分片集合的事务中的 $lookup 阶段
从 MongoDB 8.0 开始,可以在事务内使用 $lookup 阶段,并以分片集合为目标。
复制
多数写关注
从MongoDB 8.0开始,当大多数副本集成员已写入更改的oplog条目时,使用"majority"写关注(write concern)的写入操作会返回确认。 这提高了"majority"写入的性能。 在以前的版本中,这些操作将等待,并在大多数副本集成员应用更改后返回确认。
如果您的应用程序在收到来自{ w: "majority" }写入操作的确认后立即从从从节点(secondary node from replica set)读取(没有因果一致的会话),则查询返回的结果可能不包括写入更改。
新的 replSetGetStatus 指标
从 MongoDB 8.0 开始,使用 replSetGetStatus 命令时可以使用以下指标:
oplog缓冲区
从MongoDB 8.0开始,从节点并行为每个批处理写入和应用oplog条目。 写入器线程从主节点 (primary node in the replica set)节点读取新条目并将其写入本地oplog。 应用程序线程将这些更改异步应用到本地数据库。 此更改增加了从节点的复制吞吐量。
这为metrics.repl.buffer引入了一项破坏性变更 (breaking change),因为它现在提供了两个缓冲区(而不是一个)的指标。
MongoDB 8.0弃用了以下服务器状态指标:
MongoDB 8.0添加了以下服务器状态指标:
升级版 TCMalloc
从 MongoDB 8.0 开始,MongoDB 使用升级版 TCMalloc,此版本使用每 CPU 缓存而不是每线程缓存,以减少内存碎片,并使数据库对高压工作负载更有弹性。
新的 TCMalloc 版本直接影响之前针对透明大页面的生产建议。 要学习;了解更多信息,请参阅针对自托管部署的 TCMalloc 性能优化。
serverStatus 指标
从MongoDB 8.0开始,以下新的serverStatus指标报告有关tcmalloc使用情况的信息:
一般性变更
关闭性能
从 MongoDB 8.0 开始,Bulk.insert() 和数据提取工作负载可能表现得更好。不过,在运行这些工作负载之后立即关闭 MongoDB 可能需要更长的时间,因为在将额外的数据刷新到磁盘上。
将应用程序数据存储在配置分片上
从 MongoDB 8.0 开始,除了常用分片集群元数据以外,还可以配置一个配置服务器,以存储应用程序数据。此配置服务器被称为配置分片。有关详细信息,请参阅配置分片。
压缩改进
从 MongoDB 7.3开始, compact命令包含一个新的freeSpaceTargetMB选项,用于指定可恢复的最小存储空间量(以兆字节为单位)才能继续压缩。
后台压缩
从 MongoDB 8.0 开始,可以使用新的 autoCompact 命令执行后台压缩。如果启用,服务器会尝试将每个集合和索引内的可用空间保持在指定的 freeSpaceTargetMB 值以下。
dryRun 选项
如果启用,compact 命令将返回压缩可以从目标集合中回收的空间大小(以字节为单位)的估计值。如果在 dryRun 设置为 true 的情况下运行 compact,MongoDB 只返回估计值,而不执行任何类型的压缩。
并发 DDL 操作
从MongoDB 7.1开始,当您运行针对同一数据库中不同集合的多个DDL 操作时, MongoDB会并发运行这些操作。
此更改向serverStatus locks字段和currentOp.locks输出添加了两种新类型:
DDLDatabaseDDLCollection
mongos聚合查询的数据库验证
从 MongoDB 7.2 开始,尝试在mongos部署上使用不存在的数据库的聚合管道查询会返回验证错误。
在以前的版本中,这些聚合查询返回空游标。
DDL 操作
在 MongoDB 8.0 中,如果在集群执行 DDL 操作(修改集合的操作,例如 reshardCollection)时添加或删除分片,将只在完成并发 DDL 操作之后执行任何添加或删除分片的操作。
超过管道大小限制的错误代码
从 MongoDB 7.1开始,当管道超过管道阶段限制时,聚合命令将引发错误。 有关更多详细信息,请参阅阶段数限制。
getField 字段支持所有字符串
从 MongoDB 7.2 开始,您可以为$getField操作符的field输入指定解析为字符串的任何有效表达式。 在早期版本中, field仅接受字符串常量。
改进索引构建
从 MongoDB 7.1 开始,索引构建得到了改进,报告速度更快,韧性更强。您还可以使用新的indexBuildMinAvailableDiskSpaceMB参数设置索引构建所需的最小可用磁盘空间,如果磁盘空间太低,该参数会停止索引构建。
添加了以下新的索引构建指标:
有关完整详细信息,请参阅索引构建。
新增参数
auditConfig 参数
MongoDB 7.1添加了auditConfig集群参数,其中包含有关来自mongod和mongos服务器实例的Atlas 审核配置的信息。
defaultMaxTimeMS 参数
从 MongoDB 8.0 开始,可以使用 defaultMaxTimeMS 集群参数为要完成的个别读取操作指定默认时间限制。
indexBuildMinAvailableDiskSpaceMB 参数
MongoDB 7.1添加了indexBuildMinAvailableDiskSpaceMB参数,该参数允许您设立索引构建所需的最小可用磁盘空间。
tcmallocEnableBackgroundThread 参数
从 MongoDB 8.0 开始,默认启用了 tcmallocEnableBackgroundThread。这样将使 MongoDB 定期将内存重新释放给操作系统。
新的查询结构和查询设置
MongoDB 8.0 引入了一个新的查询结构。预先存在的查询结构已重命名为计划缓存查询结构。
从 MongoDB 8.0 开始,可以为新的查询结构添加查询设置。在查询规划期间,查询优化器使用查询设置作为附加输入,这样会影响为运行具有匹配的查询结构的查询而选择的计划。
与索引过滤器相比,查询设置具有经过改进的功能。从 MongoDB 8.0 开始,还弃用了索引过滤器,因此应避免使用它们。
要添加查询设置,请使用
setQuerySettings命令。要删除查询设置,请使用
removeQuerySettings命令。要检索查询设置,请在一个聚合管道中使用一个
$querySettings阶段。要阻止查询结构,请参阅操作拒绝过滤器。
要为被拒绝的查询设立日志详细级别,请使用
systemLog.component.query.rejected.verbosity参数。
从MongoDB 8.0开始, queryShapeHash包含在以下输出中:
explain{ 字段中的 命令explain.queryShapeHash$queryStats字段中的 阶段queryShapeHash
从MongoDB 8.0 开始,现有的 queryHash字段将复制到名为 planCacheShapeHash 的新字段中。 如果您使用的是早期MongoDB版本,则只能看到 queryHash字段。 未来的MongoDB版本将删除已弃用的 queryHash字段,您需要改用 planCacheShapeHash字段。
已删除 numInitialChunks 选项
从MongoDB 7.2 开始,shardCollection 命令中删除了 numInitialChunks 选项。对集合使用哈希分片,服务器会自动在集群中的每个分片上创建数据段。
参数过滤
从 MongoDB 8.0 开始,getParameter 命令接受 setAt 字段。可以使用此字段过滤 allParameters: true 返回文档,以便只显示可以在启动或运行时设置的那些参数。
针对固定大小集合的读关注
从 MongoDB 8.0 开始,可以在固定大小集合上使用读关注 "snapshot"。
serverStatus 输出变更
从MongoDB 7.1开始, serverStatus命令输出包括以下新指标:
从MongoDB 7.2开始, serverStatus命令输出包括以下新指标:
从MongoDB 7.3开始, serverStatus命令输出包括以下新指标:
从MongoDB 8.0开始, serverStatus命令输出包括以下新指标:
排序选项
从MongoDB 8.0 开始,updateOne()、replaceOne() 和 update 有一个可选的 sort字段,用于在应用更新之前对文档进行排序。
以前的版本使用 findAndModify() 和 findOneAndUpdate() 方法,按照用户指定的排序顺序更新第一个文档。对可重试写入的支持要求这些方法将整个文档复制到每个节点的特殊侧方集合中,这是一个比具有新的 sort 选项的 updateOne() 方法更昂贵的操作。
为不同命令指定查询索引提示
从MongoDB 7.1开始, distinct命令中提供hint字段,允许您指定查询的索引。
TTL Indexes
从 MongoDB7.1 开始,您可以在固定大小 集合 上创建 TTL 索引 。
查询规划和执行
表达查询阶段
从 MongoDB 8.0 开始,有限的一组查询(包括 _id 等值匹配)会跳过常规查询规划和执行。这些查询使用一项经过优化的索引扫描计划,该计划由以下计划阶段之一组成:
EXPRESS_CLUSTERED_IXSCANEXPRESS_DELETEEXPRESS_IXSCANEXPRESS_UPDATE
有关查询计划的更多信息,请参阅解释结果。
被拒绝的查询计划输出
从 MongoDB 8.0 开始,被拒绝的查询计划只包含查询的 find 部分。在以前的版本中,被拒绝的计划可以包含聚合阶段,例如 $group。查询规划器不使用这些聚合阶段来选择获胜计划,因此 rejectedPlans 字段只包含查询中用于选择获胜计划的部分。
这一更改还确保被拒绝的计划的 executionStats 不为零。因此,您现在可以查看统计信息,例如被拒绝的计划检查了多少个文档或密钥。
有关被拒绝的查询计划的更多信息,请参阅 explain.queryPlanner.rejectedPlans。
基于插槽的执行引擎禁用
从MongoDB 8.0 开始,对于索引具有非哈希路径的哈希路径前缀的集合, MongoDB会自动禁用基于插槽的执行引擎,这两个路径都在索引中。
批量多文档插入操作
从MongoDB 8.0 开始,事务之外的批量插入操作可能不再生成单独的 oplog 条目。相反, MongoDB通常会将批量插入作为单个条目进行批处理。每个文档的变更流insert事件具有相同的 clusterTime。
这一更改提高了多文档插入操作的性能,并消除了多次 oplog 写入操作可能产生的复制延迟。
OIDC 身份提供程序可以共享一个发布者
从 MongoDB 8.0 开始,当定义了多个身份提供程序 (IDP) 时,只要 audience 值对于每个发布者都是唯一的,oidcIdentityProviders 参数就会接受重复的 issuer 值。在版本 7.3 和 7.0 中,也可以使用此功能。
子管道中的命名空间
从MongoDB 8.0开始,对$lookup和$unionWith内部子管道中的命名空间进行验证,以确保正确使用from和coll字段。
有关详细信息,请参阅$lookup 子管道和$unionWith 子管道。
查询规划器优化时间
explain()方法现在会返回有关查询规划器优化时间的信息。queryPlanner.optimizationTimeMillis状态显示查询规划器在优化上花费的时间(以毫秒为单位)。
升级程序
重要
特征兼容性版本
要从 7.0 部署升级到 MongoDB 8.0,7.0 部署必须将 featureCompatibilityVersion 设置为 7.0。要检查版本:
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
要升级到 MongoDB 8.0,请参阅特定于您的 MongoDB 部署的升级说明:
如您在升级到 8.0 版本的过程中需要指导,MongoDB 的专业服务将提供主要版本的升级支持,帮助确保您的 MongoDB 应用程序能够顺利过渡,不会中断。要了解更多信息,请参阅 MongoDB 咨询服务。
立即下载
要下载 MongoDB 8.0,请访问 MongoDB 下载中心。
降级考虑因素
仅支持单版本降级
MongoDB 仅支持单版本降级。您无法降级到比当前版本落后多个版本的版本。
示例,您可以将 8.0 系列部署降级为 7.0 系列部署。但是,不支持将 7.0 系列部署进一步降级为 6.0 系列部署。
降级策略
MongoDB Community Edition不支持二进制降级。
您无法将部署的FCV降级到MongoDB的快速发布版本或从快速发布版本降级。
如果您升级或降级部署的 fCV,则在没有支持人员协助的情况下,您将无法降级 Enterprise 版部署的二进制版本。