MongoDB 7.0(稳定版本)发布说明
本页介绍了 MongoDB 7.0 中引入的更改和新功能。
MongoDB 7.0 是一个主要版本,这意味着 MongoDB Atlas 和本地部署均支持该版本。MongoDB 7.0 包含 MongoDB 6.1、6.2 和 6.3 快速发布中引入的更改。要查看这些快速发布中引入的更改,请参阅 6.X-系列快速发布中引入的更改。
要详细学习;了解主要版本和快速版本之间的差异,请参阅 MongoDB版本控制。
警告
过去的版本限制
以下关键公告会影响某些先前的 MongoDB 版本。如果您的部署依赖于受关键公告影响的功能,请升级到最新的可用补丁版本。
问题 | 受影响的版本 |
---|---|
7.0.0 - 7.0.2 | |
7.0.0 - 7.0.2(由 MetaField 嵌入式对象分片的时间序列集合) | |
7.0.0 - 7.0.5 | |
7.0.0 - 7.0.6 | |
7.0.0 - 7.0.6 |
补丁版本
7.0.15 - 2024 年 10 月 24 日
重要
对空字节的不正确中和可能会导致MongoDB Server中的缓冲区过度读取
在 7.0.15 之前的MongoDB 7.0 中,授权用户可能会发出经特殊设计的请求,在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.2
SERVER-96419 不正确的空字节中和可能会导致MongoDB Server中的缓冲区过度读取
7.0.14 - 26 8 月, 2024
修复的问题:
SERVER-82814 在确定集群集合扫描范围时,支持内部 expr 比较操作符
SERVER-85892 $documents 返回错误后使用管道进行 $merge
SERVER-91195 提供可向后移植的通用解决方案,避免错过顶级时间序列收集选项
SERVER-91625 为包含 $$NOW、$CLUSTER_TIME 和 $USER_ROLES 的表达式启用索引计划
WT-12643 修正驱逐服务器的行走逻辑,使其能够驱逐所有页面
7.0.12 - 28 6 月, 2024
重要
修复了 CSFLE 和可查询加密自查找可能会将子管道中的值作为明文而不是密文发送的问题
在 MongoDB 7.0 之前的 7.0.12 版本中,由于 CVE-2024-8013,某些复杂的自引用 $lookup
子管道的查询分析中存在的一个错误可能会导致加密字段表达式中的字面值以畸形方式发送到服务器。
如果发生这种情况,则不会返回或写入任何文档。此问题影响以下 MongoDB Server 版本中的 mongocryptd
二进制文件和 mongo_crypt_v1
共享库:
7.3.0 - 7.3.3
7.0.0 - 7.0.11
6.0.0 - 6.0.16
5.0.0 - 5.0.28
CVSS 分数:2.2
CWE: CWE-319: 敏感信息的明文传输
修复的问题:
SERVER-96254 CSFLE 和 Queryable Encryption 自查找可能无法加密子管道中的值
服务器-64574 将 mozjs/SpiderMonkey 升级到最新的 ESR
SERVER-86674 主节点追赶可能认为自己已被追赶,但实际上并非如此
SERVER-90485与 includeArrayIndex 结合使用时,$sort 无法按预期工作
SERVER-91362 性能:如果存在缓存的 jsExecution,请勿复制 JS "scope" 对象
WT-12736 在用准备好的更新重新创建页面后,标记页面为已清除
7.0.11 - 5 月23 、 2024
修复的问题:
SERVER-85279 不在仲裁节点上运行 FTDC 集合统计信息收集器
SERVER-89495 即使未指定 setParameters 也禁用测试参数
SERVER-89625 在备份期间报告命名空间和 UUID 时正确处理 directoryPerDb 和 wiredTigerDirectoryForIndexes
SERVER-90288 按位查询操作符应将 BinData 中的最低可寻址字节解释为最低有效字节
WT-12609 改进检查点清理和页面逐出逻辑
7.0.9 - 4 月26 、 2024
修复的问题:
SERVER-79637 使用相关谓词的 TS 外来集合在 $lookup 中的查询结果不正确
SERVER-82349 Mongo7 在没有集合 UUID 的情况下删除 ApplyOps 索引/删除时会崩溃
SERVER-86407 验证在应产生完整结果时未产生完整结果
SERVER -88173在许多情况下,BinData 位比较会给出错误的结果
WT-10807 跳过内存中作为树遍历的一部分的已删除页面
7.0.8 - 4 月3 、 2024
修复的问题:
SERVER-78556 将 internalInsertMaxBatchSize 的默认值返回到 64
SERVER-79575 修复 numa 节点计数
SERVER-86583 未分片集合上的非事务性快照读取可能会使用不匹配的分片元数据来执行
SERVER-87666 $documents 的查询结构在每次执行时都是唯一的
SERVER-88360 删除“分片目录和本地目录集合 uuid 不匹配”tripwire 断言
7.0.7 - 2024 年 3 月 18 日
修复的问题:
SERVER-84368 如果从过时的 mongos 针对非空的分片集合运行,则 CreateIndex 会由于 StaleConfig 错误失败
SERVER-84628 mongos 中针对读/写关注的启动警告
SERVER-85459[v7.0] bucketRoundingSeconds 参数被 fCV 6.0、二进制 7.0 上的节点接受
SERVER-85869 在配置分片上详尽查找可能会返回过时的数据
SERVER-87061 分片多文档事务可以观察到并发分片操作的部分效果
7.0.6 - Feb 28, 2024
重要
修复 MongoDB Server 可能允许成功的不可信连接的问题
由于 CVE- 2024 - 1351 ,在7.0.6之前的 MongoDB 7.0中, 在--tlsCAFile
和CAFile
的某些配置下,MongoDB Server 可能会跳过对等证书验证,这可能导致不可信连接成功。
这可能会有效降低 TLS 提供的安全保证,并打开由于证书验证失败而应关闭的连接。此问题会影响以下 MongoDB Server 版本:
7.0.0 - 7.0.5
6.0.0 - 6.0.13
5.0.0 - 5.0.24
4.4.0 - 4.4.28
CVSS 分数:8.8
CWE:CWE-295:证书验证不正确
修复的问题:
SERVER-72703 将 $out 的数据库锁降级为 MODE_IX
SERVER-82353 当 movePrimary 并发运行时,多文档事务可能会丢失文档
SERVER-84338 顶级 $or 查询可能会导致无效的 SBE 计划缓存条目,从而返回错误的结果
SERVER-84723 分片多文档事务可以观察到并发 DDL 操作的部分效果
WT-11062 安全释放引用地址以允许并发访问
7.0.5 - 2024 年 1 月 5 日
修复的问题:
SERVER-33494 WT SizeStorer 永远不会删除旧条目
SERVER-80363 设置 wtimeout 时不遵循服务器默认的 writeConcern 参数配置
SERVER-83091 $or 查询可以在计划枚举期间触发无限循环
SERVER-83830 在企业构建中,使用 storageEngine.inMemory 选项在副本集中创建集合会破坏从节点
WT-7929 研究避免 FTDC 在检查点阶段停滞的解决方案
7.0.4 - 2023 年 11 月 27 日
修复的问题:
SERVER-67962 应用 config.image_collection 删除操作需要更好的并发控制
SERVER-69244 当会话默认读关注设置为“多数”时,$merge 会失败。
SERVER-79975 [经典] 优化大型群组密钥
SERVER-81133 将路由表缓存持久化的加速逻辑
SERVER-82446 $densify 使用案例可能会导致文档超出范围
7.0.3 - 2023 年 11 月 9 日
修复的问题:
SERVER-77506 分片多文档事务可能会导致数据和 ShardVersion 不匹配
SERVER-79088 提高返回零结果的查询的 SBE 多规划器性能
SERVER-81106 接收分片不会等到集合版本在本地保存好后再开始克隆阶段
SERVER-81966 避免在刷新期间修改以前的 ChunkMap 实例
WT-11564 修复 RTS,使其仅在检查点中存在最新事务值时才读取该值
7.0.2 - 2023 年 9 月 29 日
修复的问题:
SERVER-74954 包含 $or 重写 $elemMatch 的额外条件时结果不正确
SERVER-79771 让重新分片操作对 NetworkInterfaceExceededTimeLimit 保持弹性
SERVER-79912 CheckReplDBHash 报告 BSON 无效导致 system.buckets 集合失败
SERVER-79982 批量目录编写器可以与 HistoricalCatalogIdTracker::cleanup() 并发运行,并导致错误的 PIT 查找结果
SERVER-80488 避免在负载均衡器分割数据块策略中遍历路由表
7.0.1 - 2023 年 9 月 5 日
修复的问题:
SERVER-71627 对于包含 100 万个数据块的集群,刷新缓存的集合路由信息会严重阻塞所有客户端请求
SERVER-77183 在 $project 操作后执行 $group 操作有时返回不正确的结果
SERVER-80256 QueryPlannerAnalysis::explodeForSort 不应假设索引扫描产生并查结果
7.0.0 - 2023 年 8 月 15 日
本页的其余部分将描述 MongoDB 7.0 中引入的更改和新功能。
Atlas Search 索引管理
从 MongoDB 7.0 开始,您可以使用 mongosh
方法和数据库命令管理 Atlas Search 索引。Atlas Search 索引命令仅适用于托管在 MongoDB Atlas 上的部署,并且要求 Atlas 集群层级至少为 M10。
要管理 Atlas Search 索引,请使用以下命令:
mongosh 方法
名称 | 说明 |
---|---|
在指定集合上创建 Atlas Search 索引。 | |
删除现有 Atlas Search 索引。 | |
返回指定集合上现有 Atlas Search 索引的信息。 | |
更新现有 Atlas Search 索引。 |
数据库命令
名称 | 说明 |
---|---|
在指定的集合上创建一个或多个 Atlas Search 索引。 | |
删除现有 Atlas Search 索引。 | |
更新现有 Atlas Search 索引。 |
聚合阶段
名称 | 说明 |
---|---|
列出所有集合或特定集合的抽样查询。 | |
返回指定集合上现有 Atlas Search 索引的信息。 |
一般性变更
OIDC 访问令牌身份验证行为
从MongoDB 7.0开始, 只能为 OIDC访问权限令牌指定一个audience
oidcIdentityProviders字段。 包含空数组或包含多个字符串的数组的audience
字段无效。
有关详细信息,请参阅oidcIdentityProviders 字段。
删除哈希分片键索引
从 MongoDB 7.0.3(以及 6.0.12 和 5.0.22)开始,您可以删除哈希分片键的索引。
这可以加快使用哈希分片键分片的集合的数据插入速度。在使用 mongosync
时,这还可以加快数据摄取速度。
有关详细信息,请参阅删除哈希分片键索引。
缓存刷新时间字段
并发存储引擎事务(读写票据)
从版本 7.0 开始,MongoDB 使用默认算法动态调整并发存储引擎事务的最大数量(包括读写票证),以优化过载期间的数据库吞吐量。
下表总结了如何识别 MongoDB 7.0 后版本以及更早版本的过载场景:
版本 | 诊断过载情况 |
---|---|
7.0及更高版本 | 持续较长时间的大量排队操作很可能表示过载。 并发存储引擎事务(票证)可用性长时间为 0 并不表示存在过载。 |
6.0 及更早版本 | 持续较长时间的大量排队操作很可能表示过载。 并发存储引擎事务(票证)可用性长时间为 0 可能表明出现过载。 |
要了解详情,请参阅:
wiredTiger.concurrentTransactions
已在 v8.0 中重命名
queues.execution
。
currentOp
衡量标准
从 MongoDB 7.0 开始,currentOp
命令和 db.currentOp()
方法都包含以下新字段:
$currentOp
(聚合)指标
从 MongoDB 7.0 开始,currentOp 聚合阶段包含以下新字段:
复合通配符索引
从 MongoDB 7.0 开始,您可以创建复合通配符索引。复合通配符索引具有一个通配符项以及一个或多个附加索引项。
使用复合通配符索引可支持按已知模式进行查询,并限制集合中索引的总数。
大型变更流事件
从 MongoDB 7.0 开始,如果您的变更流事件大于 16 MB,则可以使用新的 $changeStreamSplitLargeEvent
阶段将事件拆分为较小的片段。
引入了以下新指标来报告有关大型变更流事件的信息:
serverStatus 输出变更
serverStatus
在其输出中包含以下新字段:
请参阅:基于插槽的查询执行引擎
从 MongoDB 7.0 开始,基于槽的查询执行引擎提升了性能,可实现更广泛的查找和聚合查询范围。
慢查询日志消息现在包含一个 queryFramework
字段,用于指示哪个查询引擎完成了该查询:
queryFramework: "classic"
表示该查询由经典引擎完成。queryFramework: "sbe"
表示该查询由基于槽的查询执行引擎完成。
用户角色系统变量
从 MongoDB 7.0 开始,您可以使用新的 USER_ROLES
系统变量来返回当前用户的角色。
有关包含 USER_ROLES
的使用案例,请参阅查找、聚合、视图、updateOne、updateMany 和 findAndModify 示例。
新增用于数据块迁移的分片统计信息
从 MongoDB 7.1(以及 7.0、6.3.2、6.0.6 和 5.0.18)开始提供。
MongoDB 包含以下用于数据块迁移的新分片统计信息:
新增慢查询日志消息
从 MongoDB 7.0 (和6.0.13开始, 5.0.24 ),慢查询日志消息中的totalOplogSlotDurationMicros
显示写入操作获取提交时间戳以提交存储引擎写入内容与实际提交之间的时间。 mongod
支持并行写入。 但是,它可以按任意顺序提交带有提交时间戳的写操作。
要了解详情,请参阅记录慢速操作。
新增参数
analyzeShardKey 相关参数
MongoDB 7.0 新增了以下与 analyzeShardKey
命令相关的参数:
autoMergerIntervalSecs 参数
MongoDB 7.0 新增了 autoMergerIntervalSecs
参数,在启用 AutoMerger 后,该参数将用来指定自动合并轮次之间的时间间隔(以秒为单位)。autoMergerIntervalSecs
只能在分片集群的配置服务器上设置。
autoMergerThrotdlingMS 参数
MongoDB 7.0 新增了 autoMergerThrottlingMS
参数,在启用 AutoMerger 后,该参数用来指定 AutoMerger 在同一集合上发起合并操作的最小时间间隔(以毫秒为单位)。autoMergerThrottlingMS
只能在分片集群的配置服务器上设置。
balancerMigrationsThrottlingMs 参数
MongoDB 7.0 新增了 balancerMigrationsThrottlingMs
参数,可限制平衡速率。
enableDetailedConnectionHealthMetricLogLines 参数
MongoDB 7.0 新增了 enableDetailedConnectionHealthMetricLogLines
参数,该参数允许您指定是否在日志中显示一组与集群连接运行状况指标相关的日志消息。
oidcIdentityProviders
Parameter
MongoDB 7.0 新增了oidcIdentityProviders
参数,允许您在使用 OpenID Connect 身份验证时指定身份提供商 (IDP) 的配置。
configureQueryAnalysis 相关参数
MongoDB 7.0 新增了以下与 configureQueryAnalysis
命令相关的参数:
安全性
Queryable Encryption 正式发布
从 MongoDB 7.0 开始,带等值查询的 Queryable Encryption 正式发布。Queryable Encryption 在正式发布版中进行了改进,因而与其公开预览版不兼容,因此在该功能正式发布后不应使用公开预览版。如需详细信息,请参阅 MongoDB 7.0 中的兼容性更改。
对 KMIP 1.0 和 1.1 版本的支持
MongoDB 7.0(和 6.0.6)新增了 useLegacyProtocol
设置。这样 MongoDB 服务器可连接到使用 KMIP 协议版本 1.0 或 1.1 的 KMIP 服务器。
对 OpenSSL 和 FIPS 的支持
从 MongoDB 7.0 和 6.0.7 开始,MongoDB 支持在以下操作系统上使用 OpenSSL 3.0 和 OpenSSL FIPS 提供程序:
Red Hat Enterprise Linux 9
Amazon Linux 2023
Ubuntu Linux 22.04
从 MongoDB 8.0 开始,MongoDB 支持 OpenSSL 3.0 和适用于 Amazon Linux 2023.3 的 OpenSSL FIPS 提供程序。
有关详情,请参阅 TLS/SSL(传输加密)。
OpenID Connect
从 7.0 版本开始,MongoDB Enterprise 支持 OpenID Connect 身份验证。OpenID Connect 是构建在 OAuth2 之上的身份验证层。您可以使用 OpenID Connect 配置 MongoDB 数据库和第三方身份提供商之间的单点登录。
聚合(Aggregation)
新操作符:
名称 | 说明 |
---|---|
返回与指定的各百分位数一一对应的标量值数组。 此操作符可用作累加器和聚合表达式。 |
$dateToString 的月份名称说明符
MongoDB 7.0 新增了以下格式说明符,可结合 $dateToString
操作符使用:
说明符 | 说明 | Possible Values |
---|---|---|
%b | 缩写月份名称(3 个字母) | jan -dec |
%B | 完整月份名称 | january -december |
时间序列
MongoDB 7.0 从这些基于 delete
命令的操作中取消了大部分时间序列限制:
分片
分片元数据诊断
从 MongoDB 7.0 开始,可使用 checkMetadataConsistency
命令检查集群、数据库和集合级别的分片元数据是否存在不一致。这些不一致可能源于以下情况:
在集群运行先前 MongoDB 版本遇到错误的情况下进行的升级
手动干预导致集群目录损坏
现在可通过 mongosh
使用以下辅助方法:
有关该命令检查不一致的更多信息,请参阅不一致类型。
mergeAllChunksOnShard 命令
从 MongoDB 7.0 开始,mergeAllChunksOnShard
命令查找并合并分片在给定集合所拥有的所有可合并的数据块。
AutoMerger
从 MongoDB 7.0 开始,AutoMerger 可以自动合并满足可合并性要求的数据段。AutoMerger 默认启用。
从 MongoDB 7.0 开始,可以使用以下方法来控制 AutoMerger 行为:
configureCollectionBalancing 的 enableAutoMerger 参数
从 MongoDB 7.0 开始,configureCollectionBalancing
命令接受 enableAutoMerger
参数。使用 enableAutoMerger
设置 AutoMerger 是否考虑此集合。
用于取消范围删除优先级的 rangeDeleterHighPriority 参数
从 MongoDB 7.0 开始,可以使用 rangeDeleterHighPriority
参数提高或降低孤立文档清理操作相对于用户操作的优先级。
移除了 operationsBlockedByRefresh 指标
MongoDB 7.0 移除了 operationsBlockedByRefresh
文档,该文档包含有关被目录缓存刷新活动阻塞的操作的统计信息,因为对于 mongos
上每个利用集合路由信息的操作,即使该操作没有被目录刷新活动阻塞,operationsBlockedByRefresh
计数器的计数也会增加。
analyzeShardKey 命令和 db.collection.analyzeShardKey() 方法
MongoDB 7.0 新增了 analyzeShardKey
命令和 db.collection.analyzeShardKey()
方法,让您可以计算评估分片键的指标。
configureQueryAnalyzer 命令和 db.collection.configureQueryAnalyzer() 方法
MongoDB 7.0 新增了 configureQueryAnalyzer
命令,该命令允许为集合配置查询采样。MongoDB 7.0 还新增了 db.collection.configureQueryAnalyzer()
,其中封装了 configureQueryAnalyzer
命令。被采样的查询将向 analyzeShardKey
提供信息,以计算有关分片键的读写分布的指标。
6.X 系列快速发布中引入的更改
MongoDB 7.0 包含以下快速发布版本的更改和功能:
平台支持
已删除的平台
MongoDB 7.0 不再支持 PPC64LE 和 s390x 架构上的 RHEL 7/CentOS 7/Oracle 7。
升级程序
重要
特征兼容性版本
要从 MongoDB 6.0 部署升级到 MongoDB 7.0,6.0 部署必须将 featureCompatibilityVersion
设置为 6.0
。若要检查版本,您可以:
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
要升级到 MongoDB 7.0,请参阅针对 您 MongoDB 部署类型的升级说明:
如您在升级到 7.0 版本的过程中需要指导,MongoDB 的专业服务将提供主要版本的升级支持,帮助确保您的 MongoDB 应用程序能够顺利过渡,不会中断。要了解更多信息,请参阅 MongoDB 咨询服务。
降级考虑因素
仅支持单版本降级
MongoDB 仅支持单版本降级。您无法降级到比当前版本落后多个版本的版本。
例如,您可以将 7.0 系列部署降级为 6.0 系列部署。但是,不支持将 6.0 系列部署进一步降级为 5.0 系列部署。
降级政策变更
从 MongoDB 7.0 开始:
MongoDB Community Edition 不再支持二进制降级。
您无法将部署的 fCV 降级到 MongoDB 的快速发布版或从快速发布版降级到 fCV。
setFeatureCompatibilityVersion
命令需要附加参数confirm
,必须将其设置为true
才能升级或降级 fCV。如果您升级或降级部署的 fCV,在没有支持人员协助的情况下,您将无法降级 MongoDB Enterprise 部署的二进制版本。
向后不兼容的功能
MongoDB 7.0 包含不与早期版本兼容的功能。若要从 7.0 降级到早期版本,您需要删除使用这些功能的数据。
更多信息,请参阅向后不兼容的功能。
立即下载
要下载 MongoDB 7.0,请访问 MongoDB 下载中心。
报告问题
要报告问题,请参阅 MongoDB GitHub 存储库,了解有关如何为 MongoDB 服务器或其中一个相关项目提交 JIRA 工单的说明。