补丁版本
9.0.2 - 28 9 月,2026
修复的问题:
SERVER-134970 禁用 featureFlagChangeStreamOptimizedUpdateLookup
SERVER-135099 禁用 IFR 标志 featureFlagChangeStreamReaderV2
SERVER-134533 在 movePrimary 期间启动分片排干可能会导致元数据不一致
SERVER-134808 无效的 UTF-8 数据库名称处理不当
9.0.1 - 28 9 月,2026
此版本包含重要的安全和可靠性改进。
修复的问题:
SERVER-134063 在解析期间粉碎集合验证器常量
9.0.0 - 28 9 月,2026
一般性变更
变更流映像前指标
从MongoDB 9.0 开始,changeStreamPreImages.purgingJob.docsDeleted 和 changeStreamPreImages.purgingJob.bytesDeleted serverStatus指标可能会报告估计值而不是确切值。当 config.system.preimages集合的大小和计数信息不可用时,会进行这些估计。有关详细信息,请参阅 changeStreamPreImages。
MongoDB 9.0 还添加了新的 changeStreamPreImages.markerCreation serverStatus文档。本文档报告与前像采样通道相关的指标,这些采样通道构建用于删除前像的初始截断信息。有关详细信息,请参阅 changeStreamPreImages。
多文档事务限制
从MongoDB 9.0 开始,服务器限制外部客户端并发打开的多文档事务的数量。当未结事务的数量达到 maxConcurrentMultiDocumentTransactions 参数设立的限制(默认10000)时,服务器会拒绝新的多文档事务并返回 TooManyOpenTransactions 错误。要学习;了解更多信息,请参阅 maxConcurrentMultiDocumentTransactions。
每个操作的内存限制
从MongoDB 9.0 开始, MongoDB限制单个查询操作可以使用的内存总量。默认下,该限制为 1 GB 或服务器进程可用内存的 20%,以较大者为准。超过限制的操作将失败,并显示 ExceededMemoryLimit 或 QueryExceededMemoryLimitNoDiskUseAllowed。在早期版本中,操作可以使用无限量的内存。
每阶段的 100 MB 内存限制和各个阶段的溢出到磁盘行为保持不变。要学习;了解更多信息,请参阅每次操作内存限制。
服务器端 JavaScript
从MongoDB 9.0 开始,服务器端JavaScript函数( $accumulator 、 $function 和 $where )不再被弃用。 MongoDB 9.0 使用基于 WebAssembly (WASM) 的JavaScript引擎重新启用了这些功能,该引擎通过比以前版本更强大的沙盒和隔离性提高了安全性。这些函数之前在MongoDB 8.0 中已弃用。
服务器端JavaScript在 ppc64le 架构上不可用。要学习;了解更多信息,请参阅 服务器端JavaScript。
服务器状态
MongoDB 9.0 添加了以下 serverStatus指标:
重命名的服务器状态指标
MongoDB 9.0 将MongoDB 8.3 中引入的 shardingStatistics.databaseVersionUpdateCounters文档重命名为 shardingStatistics.databaseShardingMetadataStatistics。 MongoDB 9.0 还会用一设立新指标替换重命名文档的字段。
MongoDB 9.0 将 metrics.changeStreams.showExpandedEvents 指标重命名为 metrics.changeStreams.option.showExpandedEvents。如果您按名称监控指标,更新监控以使用新名称。
新增参数
sessionCatalogPartitions Parameter
MongoDB 9.0.1 添加了 sessionCatalogPartitions 参数,该参数指定会话目录中的分区数。对会话目录进行分区可减少存在大量会话时的锁争用。
分片
checkMetadataConsistency 不一致类型
MongoDB 9.0 添加了以下 checkMetadataConsistency 不一致类型:
MongoDB 9.0 删除了 ShardCatalogCacheCollectionMetadataMismatch 不一致类型。
checkMetadataConsistency 数据段检查阈值
MongoDB 9.0 在 checkMetadataConsistency 命令中添加了 performStrictChunkChecksIfBelowThreshold 选项。使用此选项可为分片的数据块比较设立数据段计数阈值。低于阈值时,该命令将执行全面比较。等于或高于该值时,该命令执行更简单的仅计数比较。有关详细信息,请参阅数据段检查阈值。
命令响应中的游标命名空间
从MongoDB 9.0 开始,当您对时间序列集合运行find、aggregate 或 listIndexes 命令时,响应中的 cursor.ns字段会返回您最初指定的面向用户的命名空间。有针对性。在以前的版本中,服务器可以返回内部命名空间。
BSON验证
MongoDB 9.0 弃用了 net.wireObjectCheck 配置选项及其相应的 --objcheck 和 --noobjcheckand CLI参数。从 9.0 开始, MongoDB默认验证服务器默认的所有BSON对象。如果服务器收到无效的BSON数据, MongoDB将返回错误。
文档验证
MongoDB 9.0 引入了新的模式验证级别 constraint。通过 constraint验证级别, MongoDB验证规则应用于所有文档插入和更新,并ACID 一致性保证集合中的每个文档都满足规则。有关详细信息,请参阅指定约束验证。
原生分片集群方法
MongoDB 9.0 引入以下 mongosh 方法:
时间序列
注意
升级到 9.0 时,单个数据库中具有超过 5,000 个时间序列集合的集群可能需要更长的时间来更新,并面临额外的写入延迟峰值。要减少这种影响,请删除任何不必要的时间序列集合。
数据存储
从 9.0 开始, MongoDB将时间序列集合存储为单个命名空间,其中包含压缩到存储桶中的时间序列数据。时间序列集合不再是可写的非物化视图。
renameCollection
从MongoDB 9.0 开始,您可以使用 renameCollection 重命名时间序列集合。
聚合(Aggregation)
$queryStats Output
MongoDB 9.0 更新 $queryStats 输出以简化指标组织。此更新包括以下新的输出字段:
字段 | 说明 |
|---|---|
| 包含与游标和批处理协议相关的指标的文档 |
| 包含与查询执行相关的指标的文档 |
| 包含与查询规划器相关的指标的文档 |
| 包含与写入操作相关的指标的文档 |
有关新输出结构的更多信息,请参阅 $queryStats 输出。
命令支持
从 9.0 开始, MongoDB集合和报告查询update、insert 和 delete 命令的统计信息。有关详细信息,请参阅更新命令查询结构、插入命令查询结构和删除命令查询结构。
默认启用查询统计信息
从MongoDB 9.0 开始,$queryStats默认收集读取和写入操作的统计信息。 MongoDB收集操作示例的统计信息,而不是每个操作的统计信息。 MongoDB按 internalQueryStatsSampleRate 参数设立的速率对读取操作进行采样,并按 internalQueryStatsWriteCmdSampleRate 参数设立的速率对写入操作进行采样。两个参数默认均为 0.01,即对 1% 的操作进行采样。
由于 $queryStats 仅报告MongoDB采样的操作,因此其输出表示针对您的部署运行的操作的子集。
查询语言
将查询设置作为命令字段
从MongoDB 9.0 开始,您可以将 querySettings文档直接传递给以下命令:
这些设置仅应用于该命令的执行。 MongoDB不会将这些设置存储在集群上,也不会应用具有相同查询结构的其他查询。
在早期版本中,您只能使用 setQuerySettings 命令设立查询设置,该命令会将设置存储在集群上,并将其应用于具有匹配查询结构的每个查询。
如果查询结构存储了集群查询设置, MongoDB会将这些设置与您在命令中传递的设置结合起来。如果两者指定相同的字段,则存储的集群设置优先。
查询旋钮
9.0版本新增。
从MongoDB 9.0 开始,您可以使用queryKnobs查询设置覆盖单个查询结构的内部服务器参数。 queryKnobs 设置需要特征兼容性版本(FCV) 9.0 或更高版本。
Per-Shape maxTimeMS
9.0版本新增。
从MongoDB 9.0 开始,您可以使用setQuerySettings 命令为单个查询结构设立maxTimeMS 时间限制。 maxTimeMS查询设置需要特征兼容性版本(FCV) 9.0 或更高版本。
虚线路径上的空值比较
从MongoDB 9.0 开始,未解析为非空值的虚线路径的计算结果为 null。当路径中的字段包含空大量、标量值大量或包含嵌套大量的大量时,将应用新行为。与使用$eq、$ne、$in、$nin、$gte 和 $lte 操作符的 null 的比较反映了新语义。 $lookup 阶段中的等值匹配也反映了新语义。升级后,将虚线路径与 null 进行比较的查询可能会返回不同的结果。有关详细信息,请参阅MongoDB 9.0 中的兼容性更改。
安全性
Queryable Encryption前缀、后缀和子字符串查询正式可用性
MongoDB 9.0 标记对已启用可Queryable Encryption的集合中的加密字符串字段进行前缀、后缀和子字符串查询的 GA。有关详细信息,请参阅启用子字符串查询和支持的聚合表达式。
要通过 mongosh 使用前缀、后缀或子字符串查询,必须单独下载自动加密共享库 9.0 或更高版本,然后使用 --cryptSharedLibPath 选项指定 mongosh 的库路径。
useInternalAuthzForX509 Parameter
MongoDB 9.0 添加了 useInternalAuthzForX509 参数。设立为 true 时,使用 MONGODB-X509 进行身份验证的客户端将使用 内部授权,即使配置了LDAP授权也是如此。有关详细信息,请参阅 useInternalAuthzForX509。
usersInfo authenticatedMechanism 字段
MongoDB 9.0 将 authenticatedMechanism字段添加到 usersInfo 命令中。此可选字符串字段指定一种身份验证机制,以确定在查找用户授权信息时哪个授权后端usersInfo 进行查询。有关详细信息,请参阅 usersInfo。
mongocryptd 已弃用
从MongoDB 9.0 开始,mongocryptd 已弃用。请改用自动加密共享库。自动加密共享库取代了 mongocryptd,并且不要求您启动单独的进程。有关详细信息,请参阅安装和配置 CSFLE 查询分析组件和安装和配置查询分析组件。
审核日志改进
MongoDB 9.0 将 directRemote字段添加到 mongo模式中的Atlas 审核消息,并将 direct_endpoint字段添加到 OCSF模式中的Atlas 审核消息。这些字段记录会话的字面 TCP 对等方,与 PROXY协议标头断言的任何客户端解决无关。有关详细信息,请参阅Mongo模式审核消息和 OCSF 模式审核消息。
复制
用于阶段跟踪的新 replSetGetStatus 指标
从MongoDB 9.0 开始,在逻辑初始同步期间使用 replSetGetStatus 命令时,以下指标可用:
initialSyncAttempts 中的每个文档还会报告该尝试的 phase、nodeUptimeSecs 和 phaseDurations。有关详细信息,请参阅 replSetGetStatus.initialSyncStatus.initialSyncAttempts。
诊断
改进对无法索引的文档的诊断
从MongoDB 9.0 开始,2dsphere 索引上的键提取失败会生成结构化诊断信息,从而更容易识别无法索引的文档:
失败的地理插入和索引构建现在包括包含
failingPath、underlyingCode、underlyingReason和failingElement字段的writeErrors[].errInfo文档。现有字段名称保持不变,但错误原因字符串现在限制为 256 个字符。地理密钥提取失败的
validate.errors输出现在会发出有界、独立的消息,并将每个文档的完整详细信息写入mongod日志。同一索引和路径上的相同故障会去重,放入一条消息中,因此要将故障映射回特定文档,请查阅日志而不是validate输出。仅当禁用日志校订时,才会记录每个文档的完整详细信息。有关详细信息,请参阅validate。
变更流指标
从MongoDB 9.0 开始,serverStatus 报告每个 mongod 和 mongos进程上的以下变更流游标指标:
metrics.changeStreams.cursor.open.total,当前在进程中打开的变更流游标的数量,包括空闲和固定游标。metrics.changeStreams.cursor.open.pinned,操作正在使用的打开的变更流游标的数量。metrics.changeStreams.cursor.totalOpened,在此进程中打开的变更流游标的累计数量,包括关闭后的游标以及恢复变更流时创建的游标。metrics.changeStreams.cursor.lifespan、平均寿命(以微秒为单位)以及在此进程中已关闭的变更流游标总数。
currentOp 命令和 $currentOp 阶段还会报告currentOp.cursor.changeStreams.optime,变更流游标在oplog中的当前位置。要学习;了解有关变更流的更多信息,请参阅MongoDB Change Streams。
已知问题
本部分介绍MongoDB 9.0中的已知问题及其解决状态。
版本中 | 问题 | 状态 |
|---|---|---|
9.0.0, 9.0.1, 9.02 | SERVER-133518:如果在先前的降级期间中断的数据块操作会阻止持久迁移接收者的恢复,则分片可能会在升级期间挂起。如果发生挂起,则该分片无法成为主节点 (primary node in the replica set),并且使用主节点 (primary node in the replica set)读取偏好(read preference)的写入和读取在该分片上不可用。从节点可以继续提供读取服务。要恢复,请重新启动或强制终止挂起的节点,以便另一个从节点(secondary node from replica set)可以成为可写的主节点 (primary node in the replica set)。 | 已在MongoDB 9.0.3 中修复。 |