对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

MongoDB 8.0发布说明

警告

MongoDB 与 Linux 内核 6.19 不兼容通过 7.0.13

由于某些 Linux 内核版本与当前供应的 TCMalloc 版本之间存在不兼容性,因此在 6.19 到 7.0.13 版本的 Linux 内核上运行 MongoDB可能会导致 MongoDB 崩溃。为防止此崩溃,MongoDB 会检测这些内核版本,并在初创企业过程中停止。此不兼容性会影响所有 MongoDB 包,包括从 MongoDB 网站、包经理或 Docker 获取的包。

Linux 内核版本 7.0.14 及更新版本解决了此不兼容性。要在受影响的系统上运行 MongoDB,请升级到 Linux 内核版本 7.0.14 或更新版本。

重要

如果使用 openssl-3.2.2-6.el9_5.x86_64包运行启用了 TLS 的早于 8.0.5 的MongoDB版本,则由于 openssl 版本错误,即使在轻工作负载下,mongod 也可能会显示高 CPU 使用率。要解决此问题,升级到MongoDB 8.0.5 或更高版本,或使用以下解决方法之一:

  • 将 openssl包降级到 openssl-3.2.2-6.el9_5.x86_64 之前的版本。

  • 为MongoDB 部署禁用 TLS(不推荐)。

MongoDB 8.0是一个主要版本,这意味着MongoDB Atlas和本地部署部署均支持该版本。 MongoDB 8.0包括MongoDB快速版本7.1 、 7.2和7.3中引入的更改。 本页介绍了这些快速发布和MongoDB 8中引入的更改。 0 。

启用 选项后, MongoDB Atlas自动将专用集群10 Latest Release (auto-upgrades)(M +) 升级到主要版本。要手动升级集群,请参阅将集群升级到新的MongoDB版本。要学习;了解有关Atlas中MongoDB 集群版本的更多信息,请参阅Atlas集群使用哪些版本的MongoDB 。

要进一步了解主要发布版本与快速发布版本之间的区别,请参阅 MongoDB 版本控制。

警告

过去的版本限制

以下关键公告会影响某些先前的 MongoDB 版本。如果您的部署依赖于受关键公告影响的功能,请升级到最新的可用补丁版本。

问题
受影响的版本

8.0.0 - 8.0.3

8.0.0 - 8.0.3

此版本包含重要的安全和可靠性改进。

重要

MongoDB 8.0.32包含针对以下问题的修复:

有关MongoDB安全更新的最新信息,请参阅MongoDB安全公告。

修复的问题:

此版本包含重要的安全和可靠性改进。

修复的问题:

此版本包含重要的安全和可靠性改进。

修复的问题:

  • SERVER-117395 避免使用数组在 $addToSet 中多次读取目标节点

  • SERVER-118763 为 checkMetadataConsistency 命令结果添加严重性级别

  • SERVER-128392 重复插入到_id包含 Decimal 的聚集文档中会引发128 KeyString 格式错误

  • SERVER-129460 jsonSchema确保时间序列更新中的 有效

  • SERVER-129617 NaN$percentile 和 中更好地验证$median

  • SERVER-129618 禁止用户提供的$vectorSearch 参数覆盖内部生成的选项

  • SERVER-129994 FlatBSON修复因插入重复字段名称而导致的格式不正确的 存储

  • SERVER-130110_internalSetObjToThis 的仅供内部使用的$function 字段置于内部客户端检查之后

  • SERVER-130111 防止匹配表达式序列化期间的无效类型转换

  • SERVER-130117 修复大多边形集合验证中的堆释放后使用问题

  • 用于 与 UUID一致性检查的 SERVER-130139 帐户o

  • SERVER-130167 通过连接未经清理的 字段来阻止JavaScript作用域构建删除请求_id

  • SERVER-1301882dsphere 几何 skip-validation 中排除部分索引

  • SERVER-130198 增加 命令中slowms 和 的授权要求sampleRateprofile

  • SERVER-130247 Decimal128在准备让出或分离游标时,将 值视为可能无效

  • SERVER-130264 在出口连接设置中应用集群内 SASL 机制白名单

  • SERVER-130266 禁止 中的 和$text$near$_internalSchemaCond

  • SERVER-130481 允许 中的符号类型CommandHelpers::parseNsFromCommand

  • SERVER-130544 commitTransactionabortTransaction对准备好的事务执行 和 的内部用户

  • SERVER-130628 防止在 FLE 压实期间将过多范围填充插入到 ESC2 中

  • SERVER-130633 compactStructuredEncryptionDatacleanupStructuredEncryptionData在数据库范围内授权 和

此版本包含重要的安全和可靠性改进。

修复的问题:

  • SERVER-123081 处理 中的复合通配符索引规范$_internalIndexKey

  • SERVER-124355 改进大量表达式的内存检查,防止 与 结合使用时出现巨大的内存数组$concatArrays$range

  • SERVER-125872 修复 节点查询解决方案的指数哈希InternalSchema*MatchExpression

  • SERVER-126247 正确验证$search.mergingPipeline 作为仅供内部使用的字段

  • SERVER-127280 拒绝sortBy $linearFill解析器中基于表达式的

  • SERVER-127357 检查 中是否存在重复的from 字段DocumentSourceGraphLookup::createFromBson()

  • SERVER-127566 限制可用于 FLE2 字段的争用因子

  • SERVER-127661 指定autocommit startOrContinueTransaction时需要

  • SERVER-127689 仅允许内部客户端指定$_internalPredicate

  • SERVER- 为127694 添加类型检查DBPointer

  • SERVER-127831 禁止外部用户运行FLE2 命令并将crudProcessed 设立true

  • SERVER-128198 修复mongoskillCursors 以根据游标的命名空间而不是请求命名空间检查授权

  • SERVER-128341 修复因对 表达式进行排序而导致的服务器崩溃$meta

  • SERVER-129103 限制 $convert 和 $constant/$literal 中的目标 BinData 子类型

  • SERVER-128362 对 中的返回值添加 null 检查ocspClientCallback

  • SERVER-128387 从代理协议解析器的 SSL TLV 中删除身份验证角色解析

  • SERVER-128433 防止外部客户端设置runtimeConstants.userRoles

  • SERVER-128473 修复了$function advanceGeneration()中由于缺少对保留的BSON参数的 调用而导致的释放后使用

  • SERVER-128494 验证 中的外部BSONMultiBsonStreamCursor

  • SERVER-128512 禁用 SBE 可追加扫描和恢复扫描

  • SERVER-128517 为预身份验证流式传输hello 添加可配置的最小超时,以防止非常小的maxAwaitTimeMS 值导致热循环

  • SERVER-128832 防护ImplScopeModuleLoader 创建

  • SERVER-103955 使用 commitQuorum 和 abort 进行索引构建争用

  • SERVER-111411 重新分片无法正确处理时间序列集合的 forceRedistribution

  • SERVER-111885 索引构建合并溢出与 replSetGetStatus 冲突

  • SERVER-112273 使用 killOp() 终止 OplogWriter 操作会导致崩溃

  • SERVER-127346 使会话刷新具有 kExempt 准入优先级

重要

MongoDB8.0.26 包含对 CVE-2026 - 的修复11933

有关MongoDB安全更新的最新信息,请参阅MongoDB安全公告。

修复的问题:

修复的问题:

重要

MongoDB 8.0.24包含针对以下问题的修复:

有关MongoDB安全更新的最新信息,请参阅MongoDB安全公告。

修复的问题:

重要

MongoDB 8.0.23包含针对以下问题的修复:

有关MongoDB安全更新的最新信息,请参阅MongoDB安全公告。

修复的问题:

重要

MongoDB 8.0.21包含针对以下问题的修复:

有关MongoDB安全更新的最新信息,请参阅MongoDB安全公告。

修复的问题:

重要

MongoDB 8.0.20包含针对以下问题的修复:

有关MongoDB安全更新的最新信息,请参阅MongoDB安全公告。

重要

MongoDB 8.0.18包含针对以下问题的修复:

有关MongoDB安全更新的最新信息,请参阅MongoDB安全公告。

修复的问题:

重要

MongoDB8.0.17 包含 CVE-2025 -14847 的修复。

有关MongoDB安全更新的最新信息,请参阅MongoDB安全公告。

修复的问题:

重要

MongoDB8.0.16 包含针对 CVE-2025 -12893 、CVE-2025 -13507 CVE-2025 -14345 的修复。

有关MongoDB安全更新的最新信息,请参阅MongoDB安全公告。

修复的问题:

  • SERVER-82688 :修复当连接数超过mongod WiredTiger 的 限制时导致 崩溃的错误session_max

  • SERVER-95374 :解决了复合通配符索引在联合或查询规划期间可能错误下推谓词的问题

  • SERVER-103960 :对字段路径(Field Path)实施适当的验证检查,确保各部分的数量不超过255

  • SERVER-108565 :改进对时间序列集合超大写入的处理。

  • SERVER-112467 :改进对待处理代理连接数量的跟踪和报告

  • SERVER-112520 :修复了将文档插入时间序列集合中的现有存储桶时无法写入地理索引的问题

  • WT-9575 :修复了以下问题:更新页面的更新晚于最早的ACID 事务ID时,未将其排队等待逐出

  • WT-15225 :修复了新建表和EBUSY drop()操作的 问题

重要

MongoDB 服务器查询规划器中的释放后使用可能会导致崩溃或未定义的行为。

说明:授权用户可能会导致缓冲区过度读取,从而导致MongoDB 服务器崩溃。在查询运行时运行DDL 操作时,可能会出现这种情况。

CVSS 分数:5.3

CWE:416 释放后使用

受影响的产品版本: MongoDB Server 8.2.0、8.0.14 至 8.0、7.0.24 至 7.0 以及更早的已结束生命周期的主要版本。

修复的问题:

重要

MongoDB8.0.14 包含对 CVE-2025 -13643 的修复。

有关MongoDB安全更新的最新信息,请参阅MongoDB安全公告。

修复的问题:

重要

MongoDB8.0.13 包含对 CVE-2025 -13644 的修复。

有关MongoDB安全更新的最新信息,请参阅MongoDB安全公告。

修复的问题:

兼容性更改:

  • SERVER-103927 :更改使用 Bazel 而不是 SCons 来构建服务器的方式

重要

由于 CVE-2025-10061,在MongoDB 8.0 和 8.0.1 中,授权用户可以通过特制的 $ 群组查询导致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 输入验证不正确

修复的问题:

修复的问题:

重要

格式不正确的 KMIP 响应可能会导致读取访问权限冲突

由于 CVE-2025-12657,在MongoDB 8.0 和 8.0.1 中,mongo 二进制文件内置的 KMIP 响应解析器对某些格式错误的数据包容忍度过高,可能会将其解析为无效对象。稍后读取此对象可能会导致读取访问权限冲突。

此问题会影响以下 MongoDB Server 版本:

  • 8.0.0 - 8.0.9

  • 7.0.0 - 7.0.21

CVSS 分数:5.9

CWE:CWE-754:对异常或异常情况的不当检查

修复的问题:

重要

修复了对不完整数据的错误处理可能会阻止mongos接受新连接的问题

由于 CVE-2025-6714,在 MongoDB 8.0 和 8.0.1 中,MongoDB Server 的 mongos 组件可能会对新连接无响应,因为对不完整数据的处理不当。此问题会影响配置了在指定端口上使用 HAProxymongos 负载均衡器支持的分片的 MongoDB 集群。

此问题会影响以下 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 不受控制的资源消耗

修复的问题:

修复的问题:

重要

由于 $mergeCursors 阶段, MongoDB Server可能容易受到权限的影响

由于 CVE-2025-6713,在 MongoDB 8.0 和 8.0.1 中,由于对 MongoDB Server 中 $mergeCursors 阶段的处理不当,未经授权的用户可能会在未经适当授权的情况下利用特制的聚合管道访问数据。这可能会导致在未经进一步授权的情况下访问数据。

此问题会影响以下 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

修复的问题:

重要

MongoDB Server 的 OIDC 身份验证中的预身份验证拒绝服务漏洞

由于 CVE-2025-6709,在 MongoDB 8.0 和 8.0.1 中,在使用 OIDC 身份验证时,MongoDB Server 容易受到拒绝服务漏洞,因为它在 JSON 输入中处理特定日期值的方式不当。可以使用 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,在MongoDB 8.0 和 8.0.1 中, MongoDB Server可能容易因JSON解析机制而受到堆栈溢出的影响,其中特制的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-674:不受控制的递归

修复的问题:

重要

对空字节的不正确中和可能会导致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

修复的问题:

修复的问题:

本部分介绍MongoDB 8.0中的已知问题及其解决状态。

版本中
问题
状态

8.0.18, 8.0.19

SERVER-118428 :对 的更改将mongocryptd 可以接收的消息的最大大小限制为mongocryptd 1616KiB。用户通过自动客户端字段级加密(CSFLE) 或Queryable Encryption发送大于 KiB 的命令时,可能会遇到此问题。

要避免此错误,请在升级mongocryptd 或使用 crypt_shared 库时跳过这些版本。

未解决。

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 指标记录操作。可以根据 workingMillisdurationMillis 记录操作,并将每个指标设置为不同的阈值。

从 MongoDB 8.0 开始,可以使用 $convert 操作符执行以下转换:

  • 字符串值转换为 binData 值

  • binData 值转换为字符串值

MongoDB 8.0 还包含一个新的辅助工具表达式 $toUUID,它提供了用于将字符串转换为 UUID 值的简化语法。

从MongoDB 7.1开始, $queryStats阶段会返回已记录查询的统计信息。

从 MongoDB 8.0 开始,$queryStats 改进了变更流的跟踪和报告指标。有关更多信息,请参阅 $queryStats 变更流行为

从 MongoDB 8.0 开始,当计算排名时,null$denseRank$rank sortBy 操作中的缺失字段值将被同等对待。这一更改将使 denseRankrank 的行为与 $sort 一致。

从 MongoDB 8.0 开始,可查询加密支持使用 $lt$lte$gt$gte 操作符对加密字段执行范围查询。有关详细信息,请参阅可查询加密支持的操作。要允许对加密字段执行范围查询,请参阅创建加密模式

从 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命令。

有关详细信息,请参阅配置分片。要开始使用,请参阅使用配置分片启动分片集群。要将副本集转换为带有配置分片的分片分片集群,请参阅将副本集转换为嵌入式配置分片。

从MongoDB 8.0开始, serverStatus在其输出中包含以下新的shardingStatistics字段:

MongoDB 7.1包含以下针对数据数据块迁移的新分片统计信息:

从 MongoDB 7.2 开始,当您使用哈希分片键对collection进行分片时,该操作默认为每个分片创建一个数据块。Previously, the operation created two chunks by default.

从MongoDB 8.0开始,您可以使用directShardOperations角色执行需要直接对分片执行命令的分片操作。

警告

使用 directShardOperations角色运行命令可能会导致集群停止正常工作,并可能导致数据损坏。仅将 directShardOperations角色用于维护目的或在MongoDB支持的指导下使用。执行完维护操作后,请停止使用 directShardOperations角色。

从MongoDB 8.0.5 开始,您可以直接在分片上运行dbHash。有关节点直接命令的完整列表,请参阅分片节点直接命令。

从MongoDB7.1 开始,当客户端的mongos getMore 请求设置 exhaustAllowed 标志时, 支持耗尽游标。当客户端收到数据库服务器针对单个请求的多个回复时,这可以提高分分片的集群上的查询性能。

从MongoDB 7.1开始, mongos接受来自 [ 0 , 65535 ] 的--port值。 有关更多信息,请参阅--port

从 MongoDB 7.1开始, findAndModifydeleteOne()可以使用部分分片键来查询分片集合。

MongoDB 8.0 在重新分片操作中引入了显着的性能改进,从而大幅减少了操作运行所需的时间。

此外,如果您的应用程序和集群满足必要的要求限制,则可以使用reshardCollection命令对同一键上的collection重新分片,从而重新分发您的collection,这比备用范围迁移过程要快得多。

命令中添加了以下选项:

字段
说明

forceRedistribution

启用同键重新分片。

有关示例,请参阅将数据重新分发到新分片。

从 MongoDB 7.1开始, fsyncfsyncUnlock命令可以对分片集群执行 fsync 操作。

当在mongos上运行且lock字段设立为true时, fsync命令会将写入操作从存储层刷新到磁盘并锁定每个分分片,从而阻止其他写入操作。 然后可以使用fsyncUnlock命令解锁集群。

此功能支持使用mongodump 对分片的集群进行自我管理备份。

从MongoDB 7.1开始,在分分片的集合上使用updateOne()upsert: true时,您不需要过滤中包含完整的分分片键。

从 MongoDB 8.0 开始,可以在事务内使用 $lookup 阶段,并以分片集合为目标。

从MongoDB 8.0开始,当大多数副本集成员已写入更改的oplog条目时,使用"majority"写关注(write concern)的写入操作会返回确认。 这提高了"majority"写入的性能。 在以前的版本中,这些操作将等待,并在大多数副本集成员应用更改后返回确认。

如果您的应用程序在收到来自{ w: "majority" }写入操作的确认后立即从从从节点(secondary node from replica set)读取(没有因果一致的会话),则查询返回的结果可能不包括写入更改。

从 MongoDB 8.0 开始,使用 replSetGetStatus 命令时可以使用以下指标:

从MongoDB 8.0开始,从节点并行为每个批处理写入和应用oplog条目。 写入器线程从主节点 (primary node in the replica set)节点读取新条目并将其写入本地oplog。 应用程序线程将这些更改异步应用到本地数据库。 此更改增加了从节点的复制吞吐量。

这为metrics.repl.buffer引入了一项破坏性变更 (breaking change),因为它现在提供了两个缓冲区(而不是一个)的指标。

MongoDB 8.0弃用了以下服务器状态指标:

MongoDB 8.0添加了以下服务器状态指标:

从 MongoDB 8.0 开始,MongoDB 使用升级版 TCMalloc,此版本使用每 CPU 缓存而不是每线程缓存,以减少内存碎片,并使数据库对高压工作负载更有弹性。

新的 TCMalloc 版本直接影响之前针对透明大页面的生产建议。 要学习;了解更多信息,请参阅针对自托管部署的 TCMalloc 性能优化。

从MongoDB 8.0开始,以下新的serverStatus指标报告有关tcmalloc使用情况的信息:

从 MongoDB 8.0 开始,Bulk.insert() 和数据提取工作负载可能表现得更好。不过,在运行这些工作负载之后立即关闭 MongoDB 可能需要更长的时间,因为在将额外的数据刷新到磁盘上。

从 MongoDB 8.0 开始,除了常用分片集群元数据以外,还可以配置一个配置服务器,以存储应用程序数据。此配置服务器被称为配置分片。有关详细信息,请参阅配置分片

从 MongoDB 7.3 开始, compact命令包含一个新的 freeSpaceTargetMB 选项,用于指定可恢复的最小存储空间量(以兆字为单位)才能继续压实。

从 MongoDB 8.0 开始,可以使用新的 autoCompact 命令执行后台压缩。如果启用,服务器会尝试将每个集合和索引内的可用空间保持在指定的 freeSpaceTargetMB 值以下。

如果启用,compact 命令将返回压缩可以从目标集合中回收的空间大小(以字节为单位)的估计值。如果在 dryRun 设置为 true 的情况下运行 compact,MongoDB 只返回估计值,而不执行任何类型的压缩。

从MongoDB 7.1开始,当您运行针对同一数据库中不同集合的多个DDL 操作时, MongoDB会并发运行这些操作。

此更改向serverStatus locks字段和currentOp.locks输出添加了两种新类型:

  • DDLDatabase

  • DDLCollection

从 MongoDB 7.2 开始,尝试在mongos部署上使用不存在的数据库的聚合管道查询会返回验证错误。

在以前的版本中,这些聚合查询返回空游标。

在 MongoDB 8.0 中,如果在集群执行 DDL 操作(修改集合的操作,例如 reshardCollection)时添加或删除分片,将只在完成并发 DDL 操作之后执行任何添加或删除分片的操作。

从 MongoDB 7.1 开始,当管道超过管道阶段限制时,聚合命令将抛出错误。有关更多详细信息,请参阅阶段数量限制。

从 MongoDB 7.2 开始,您可以为$getField操作符的field输入指定解析为字符串的任何有效表达式。 在早期版本中, field仅接受字符串常量。

从 MongoDB 7.1 开始,索引构建得到了改进,报告速度更快,韧性更强。您还可以使用新的indexBuildMinAvailableDiskSpaceMB参数设置索引构建所需的最小可用磁盘空间,如果磁盘空间太低,该参数会停止索引构建。

添加了以下新的索引构建指标:

有关完整详细信息,请参阅索引构建。

MongoDB 7.1添加了auditConfig集群参数,其中包含有关来自mongodmongos服务器实例的Atlas 审核配置的信息。

从 MongoDB 8.0 开始,可以使用 defaultMaxTimeMS 集群参数为要完成的个别读取操作指定默认时间限制。

MongoDB 7.1添加了indexBuildMinAvailableDiskSpaceMB参数,该参数允许您设立索引构建所需的最小可用磁盘空间。

从 MongoDB 8.0 开始,默认启用了 tcmallocEnableBackgroundThread。这样将使 MongoDB 定期将内存重新释放给操作系统。

MongoDB 8.0.21添加 procFileSizeLimit 参数。如果 procfs 文件(/proc 下的表格文本文件)的大小超过此限制,则全时诊断数据捕获会跳过读取该文件。

MongoDB 8.0 引入了一个新的查询结构。预先存在的查询结构已重命名为计划缓存查询结构

从 MongoDB 8.0 开始,可以为新的查询结构添加查询设置。在查询规划期间,查询优化器使用查询设置作为附加输入,这样会影响为运行具有匹配的查询结构的查询而选择的计划。

索引过滤器相比,查询设置具有经过改进的功能。从 MongoDB 8.0 开始,还弃用了索引过滤器,因此应避免使用它们。

从MongoDB 8.0开始, queryShapeHash包含在以下输出中:

从MongoDB 8.0 开始,现有的 queryHash字段将复制到名为 planCacheShapeHash 的新字段中。 如果您使用的是早期MongoDB版本,则只能看到 queryHash字段。 未来的MongoDB版本将删除已弃用的 queryHash字段,您需要改用 planCacheShapeHash字段。

从MongoDB 7.2 开始,shardCollection 命令中删除了 numInitialChunks 选项。对集合使用哈希分片,服务器会自动在集群中的每个分片上创建数据段。

从 MongoDB 8.0 开始,getParameter 命令接受 setAt 字段。可以使用此字段过滤 allParameters: true 返回文档,以便只显示可以在启动运行时设置的那些参数。

从 MongoDB 8.0 开始,可以在固定大小集合上使用读关注 "snapshot"

从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字段,允许您指定查询的索引。

从 MongoDB7.1 开始,您可以在固定大小 集合 上创建 TTL 索引

从 MongoDB 8.0 开始,有限的一组查询(包括 _id 等值匹配)会跳过常规查询规划和执行。这些查询使用一项经过优化的索引扫描计划,该计划由以下计划阶段之一组成:

  • EXPRESS_CLUSTERED_IXSCAN

  • EXPRESS_DELETE

  • EXPRESS_IXSCAN

  • EXPRESS_UPDATE

有关查询计划的更多信息,请参阅解释结果

从 MongoDB 8.0 开始,被拒绝的查询计划只包含查询的 find 部分。在以前的版本中,被拒绝的计划可以包含聚合阶段,例如 $group。查询规划器不使用这些聚合阶段来选择获胜计划,因此 rejectedPlans 字段只包含查询中用于选择获胜计划的部分。

这一更改还确保被拒绝的计划的 executionStats 不为零。因此,您现在可以查看统计信息,例如被拒绝的计划检查了多少个文档或密钥。

有关被拒绝的查询计划的更多信息,请参阅 explain.queryPlanner.rejectedPlans

从MongoDB 8.0 开始,对于索引具有非哈希路径的哈希路径前缀的集合, MongoDB会自动禁用基于插槽的执行引擎,这两个路径都在索引中。

从MongoDB 8.0 开始,事务之外的批量插入操作可能不再生成单独的 oplog 条目。相反, MongoDB通常会将批量插入作为单个条目进行批处理。每个文档的变更流insert事件具有相同的 clusterTime

这一更改提高了多文档插入操作的性能,并消除了多次 oplog 写入操作可能产生的复制延迟。

从 MongoDB 8.0 开始,定义多个 IdP 时,只要 audience 值对于每个颁发者来说都是唯一的,oidcIdentityProviders 参数就会接受重复的 issuer 值。版本 7.3 和 7 中也提供了此功能。0

从MongoDB 8.0开始,对$lookup$unionWith内部子管道中的命名空间进行验证,以确保正确使用fromcoll字段。

有关详细信息,请参阅$lookup 子管道$unionWith 子管道。

explain()方法现在会返回有关查询规划器优化时间的信息。queryPlanner.optimizationTimeMillis状态显示查询规划器在优化上花费的时间(以毫秒为单位)。

从MongoDB 8.0.22 开始,您提供给 chars 的 string 长度限制为 4096 个字符。有关详细信息,请参阅 $trim 限制。

重要

特征兼容性版本

要从 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 下载中心

重要

次要版本可能不支持某些功能,包括Atlas实时迁移或 mongosync。如果您需要这些功能,请改用主要发布。

MongoDB 仅支持单版本降级。您无法降级到比当前版本落后多个版本的版本。

示例,您可以将 8.0 系列部署降级为 7.0 系列部署。但是,不支持将 7.0 系列部署进一步降级为 6.0 系列部署。

  • MongoDB Community Edition不支持二进制降级。

  • 您无法将部署的FCV降级到MongoDB的快速发布版本或从快速发布版本降级。

  • 如果您升级或降级部署的 fCV,则在没有支持人员协助的情况下,您将无法降级 Enterprise 版部署的二进制版本。