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

MongoDB 9.0发布说明

修复的问题:

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

重要

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

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

修复的问题:

从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 内存限制和各个阶段的溢出到磁盘行为保持不变。要学习;了解更多信息,请参阅每次操作内存限制。

从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。如果您按名称监控指标,更新监控以使用新名称。

MongoDB 9.0.1 添加了 sessionCatalogPartitions 参数,该参数指定会话目录中的分区数。对会话目录进行分区可减少存在大量会话时的锁争用。

MongoDB 9.0 添加了以下 checkMetadataConsistency 不一致类型:

MongoDB 9.0 删除了 ShardCatalogCacheCollectionMetadataMismatch 不一致类型。

MongoDB 9.0 在 checkMetadataConsistency 命令中添加了 performStrictChunkChecksIfBelowThreshold 选项。使用此选项可为分片的数据块比较设立数据段计数阈值。低于阈值时,该命令将执行全面比较。等于或高于该值时,该命令执行更简单的仅计数比较。有关详细信息,请参阅数据段检查阈值。

从MongoDB 9.0 开始,当您对时间序列集合运行find、aggregate 或 listIndexes 命令时,响应中的 cursor.ns字段会返回您最初指定的面向用户的命名空间。有针对性。在以前的版本中,服务器可以返回内部命名空间。

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将时间序列集合存储为单个命名空间,其中包含压缩到存储桶中的时间序列数据。时间序列集合不再是可写的非物化视图。

从MongoDB 9.0 开始,您可以使用 renameCollection 重命名时间序列集合。

MongoDB 9.0 更新 $queryStats 输出以简化指标组织。此更新包括以下新的输出字段:

字段
说明

metrics.cursor

包含与游标和批处理协议相关的指标的文档

metrics.queryExec

包含与查询执行相关的指标的文档

metrics.queryPlanner

包含与查询规划器相关的指标的文档

metrics.writes

包含与写入操作相关的指标的文档

有关新输出结构的更多信息,请参阅 $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 或更高版本。

有关详细信息,请参阅查询旋钮。

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 中的兼容性更改。

MongoDB 9.0 标记对已启用可Queryable Encryption的集合中的加密字符串字段进行前缀、后缀和子字符串查询的 GA。有关详细信息,请参阅启用子字符串查询和支持的聚合表达式。

要通过 mongosh 使用前缀、后缀或子字符串查询,必须单独下载自动加密共享库 9.0 或更高版本,然后使用 --cryptSharedLibPath 选项指定 mongosh 的库路径。

MongoDB 9.0 添加了 useInternalAuthzForX509 参数。设立为 true 时,使用 MONGODB-X509 进行身份验证的客户端将使用 内部授权,即使配置了LDAP授权也是如此。有关详细信息,请参阅 useInternalAuthzForX509。

MongoDB 9.0 将 authenticatedMechanism字段添加到 usersInfo 命令中。此可选字符串字段指定一种身份验证机制,以确定在查找用户授权信息时哪个授权后端usersInfo 进行查询。有关详细信息,请参阅 usersInfo。

从MongoDB 9.0 开始,mongocryptd 已弃用。请改用自动加密共享库。自动加密共享库取代了 mongocryptd,并且不要求您启动单独的进程。有关详细信息,请参阅安装和配置 CSFLE 查询分析组件和安装和配置查询分析组件。

MongoDB 9.0 将 directRemote字段添加到 mongo模式中的Atlas 审核消息,并将 direct_endpoint字段添加到 OCSF模式中的Atlas 审核消息。这些字段记录会话的字面 TCP 对等方,与 PROXY协议标头断言的任何客户端解决无关。有关详细信息,请参阅Mongo模式审核消息和 OCSF 模式审核消息。

从MongoDB 9.0 开始,在逻辑初始同步期间使用 replSetGetStatus 命令时,以下指标可用:

initialSyncAttempts 中的每个文档还会报告该尝试的 phase、nodeUptimeSecs 和 phaseDurations。有关详细信息,请参阅 replSetGetStatus.initialSyncStatus.initialSyncAttempts。

从MongoDB 9.0 开始,2dsphere 索引上的键提取失败会生成结构化诊断信息,从而更容易识别无法索引的文档:

从MongoDB 9.0 开始,serverStatus 报告每个 mongod 和 mongos进程上的以下变更流游标指标:

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 中修复。