Docs 菜单

Docs 主页开发应用程序MongoDB Manual

MongoDB 6.0 发布说明

在此页面上

  • 补丁版本
  • 聚合(Aggregation)
  • Change Streams
  • 集群管理
  • 集群化集合
  • 索引
  • 安装
  • 副本集
  • 安全性
  • 分片
  • 请参阅:基于插槽的查询执行引擎
  • Stable API
  • 时间序列集合
  • 总体改进
  • 影响兼容性的变更
  • 升级程序
  • 降级考虑因素
  • 立即下载
  • 已知问题
  • 报告问题

本页介绍了 MongoDB 6.0 中引入的更改和新功能。

MongoDB 6.0 是一个主要版本,这意味着 MongoDB Atlas 和本地部署均支持该版本。MongoDB 6.0 包括 MongoDB 5.1、5.2 和 5.3 快速发布中引入的更改。本页介绍这些快速发布和 MongoDB 6.0 中引入的更改。

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

警告

过去的版本限制

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

问题
受影响的版本
SERVER-68511
6.0.0
6 。 0 。 0 - 6 。 0 。 12
6.0.0 - 6.0.11(由 MetaField 嵌入式对象分片的时间序列集合)
6.0.0 - 6.0.13
6.0.0 - 6.0.4(ARM64 或 POWER 系统架构)
6.0.0 - 6.0.5(Ops Manager 或 Cloud Manager 集群上的增量备份)

重要

修复 MongoDB Server 可能允许成功的不可信连接

修复的问题:

修复的问题:

修复的问题:

修复的问题:

修复的问题:

本页的其余部分描述 MongoDB 6.0 中引入的更改和新功能。

MongoDB 6.0 引入了以下聚合阶段:

阶段
说明
在文档序列中创建新文档,前提是这些文档中的指定字段值缺失。。
从输入表达式返回字面文档。

填充文档中的 null 和缺失的字段值。

6.0.3 新版功能:提供有关分片集合的大小与数据分布信息。

MongoDB 6.0 引入了以下聚合操作符:

Operator
说明
根据指定的排序顺序返回组内的底部元素。
根据指定的排序顺序,返回群组内后 n 个元素的聚合。
返回群组内前 n 个元素的聚合。与 $firstN 数组操作符不同。
从数组开头返回指定数量的元素。与 $firstN 累加器不同。
返回群组内后 n 个元素的聚合。与 $lastN 数组操作符不同。
从数组末尾返回指定数量的元素。与 $lastN 累加器不同。

使用 线性插值 填充null 窗口 中的 和缺失字段 基于周围字段值。

最后一次的观察结果被延续了下来。将窗口null 和缺失字段的值设置为该字段的最后一个非 null 值。

返回群组内 n 个最大值元素的聚合。与 $maxN 数组操作符不同。
返回数组中 n 个最大值。与 $maxN 累加器不同。
返回群组内 n 个最小值元素的聚合。与 $minN 数组操作符不同。
返回数组中 n 个最小值。与 $minN 累加器不同。
根据数组的元素对数组排序。
根据指定的排序顺序返回群组内第一个元素。与命令 top 不同。
根据指定的排序顺序,返回群组内前 n 个元素的聚合。

long 形式返回时间戳中的递增序数。

long 形式返回时间戳中的秒数。

从 MongoDB 5.1 开始,$lookup$graphLookup 聚合阶段支持 from 参数中的分片集合

在 MongoDB 的早期版本中,$lookup$graphLookup 仅允许未分片的 from 集合。

当以分片集合为目标时,您无法在事务中使用 $graphLookup 阶段。

从 MongoDB 5.1 开始,对变更流进行了优化,从而提高了资源利用率并加快了某些聚合分析管道阶段的执行速度。

从 MongoDB 6.0 开始,变更流输出新增 wallTime 字段,包含数据库操作的服务器日期和时间。

从 MongoDB 6.0 开始,您可以使用变更流输出变更前后的文档版本(文档前像和后像)。例如,请参阅提供文档前像和后像的变更流。

从 MongoDB 6.0 开始,变更流可显示 DDL 操作的其他更改事件,例如创建索引和删除集合。

更多信息,请参阅扩展事件。

从 MongoDB 6.0 开始,只要有可能,匹配筛选器就会比之前的版本更早地应用到变更流。这样可以提高性能。对于定义狭窄的筛选器,较早的匹配可能会导致先前版本中成功的操作在 6.0 中失败。

从 MongoDB 6.0 开始,可以使用 MongoDB 集群参数修改和检索副本集或分片集群中所有节点的配置选项。您可以使用 setClusterParameter 修改整个集群的选项,使用 getClusterParameter 检索集群参数的值。

从 MongoDB 6.0 开始,您可以使用 ShardingTaskExecutorPoolMinSizeForConfigServersShardingTaskExecutorPoolMaxSizeForConfigServers 来为配置服务器设置分片 TaskExecutor 连接池的最小和最大大小。

从 MongoDB 6.0 开始,您可以使用 changeStreamOptions 来控制变更流前像和后像的保留策略。

从 MongoDB 6.0 开始,可以使用新的 internalSessionsReapThreshold 参数设置针对内部会话元数据删除的会话限制。

从 MongoDB 5.3 开始,默认情况下禁用对副本集中多个仲裁节点的支持。要启用对多个仲裁器的支持,请使用 allowMultipleArbiters 参数启动每个节点。

从 MongoDB 5开始。 3 ,可以创建聚集文档。

聚集文档将已建立索引的文档存储在与索引规范相同的WiredTiger文件中。与常规索引相比,将collection的文档和索引存储在同一文件中可在存储和性能方面带来优势。

聚集文档是使用集群化索引创建的。聚集索引指定文档的存储顺序。

要创建聚集文档,请参阅示例。

要了解与普通集合相比的优势,请参阅集群化集合。

从 MongoDB 5.1 开始,您可以使用 collMod 数据库命令将 expireAfterSeconds 选项添加到现有单字段非 TTL 索引中。

从 MongoDB 6.0 开始,可以针对 collMod 命令使用 prepareUniqueunique 选项,将现有标准索引转换为唯一索引。

从 MongoDB 6.0 开始,可以使用操作符 $in$or 创建部分索引partialFilterExpression 最大深度也从 2 扩展到 4。您现在可以在非顶级使用操作符 $and$or

从 MongoDB 5.1 开始,新的 SE Linux 策略适用于

  • MongoDB Enterprise Server

  • MongoDB Community Edition 服务器

在 Red Hat Linux 上运行。SELinux 策略面向使用 rpm 安装程序包的默认安装。

从 MongoDB 5.3 开始,默认情况下禁用对副本集中多个仲裁节点的支持。要启用对多个仲裁器的支持,请使用 allowMultipleArbiters 参数启动每个节点。

从 MongoDB 5.2 开始,initialSyncMethod 确定初始同步逻辑初始同步还是基于文件拷贝的初始同步

initialSyncMethod 仅在 MongoDB Enterprise Server 中可用。

从 MongoDB 6.0 开始,您可以使用 oplogBatchDelayMillis 服务器参数来指定从节点上 oplog 批处理的写入延迟。添加较短的 oplog 批处理延迟可以减少从节点上的 IOPS,但同时也增加了写关注为 "majority" 的写入延迟。

有关更多信息,请参阅 oplogBatchDelayMillis

从 MongoDB 6.0 Enterprise 开始,您可以对 MongoDB 审核日志进行加密。

要配置审核日志,请参阅审核日志。

从 MongoDB 6开始。 0 。 3 ,分片集群中的数据根据数据大小而不是数据块数量进行分布。请注意分片集群数据分布行为的以下重大变化:

  • 负载均衡器分配数据范围而不是数据段。均衡策略着眼于数据分布的均匀性,而不是数据段分布。

  • 数据段不受自动分割的约束。相反,仅当跨分片移动时才会分割数据段。

  • 数据块现在称为范围。

  • moveRange 已替换moveChunk

从 MongoDB 5.2 开始,默认数据段大小为 128 兆字节。在早期版本的 MongoDB 中,默认数据段大小为 64 兆字节。

从 MongoDB 6.0 开始,集合分片不再需要 enableSharding 命令。

从 MongoDB 5.3 开始,balancerCollectionStatus 命令在进行数据块碎片整理的命名空间上运行时会返回详细信息。输出包括碎片整理的当前阶段信息以及待处理数据块的数量。

要查看输出示例,请参阅正在进行的碎片整理流程。

从 MongoDB 5.1 开始,MongoDB 对符合条件的查询使用新查询执行引擎(名为“基于插槽的查询执行引擎”)。如果使用基于插槽的查询执行引擎,查询解释计划输出则包含新字段。

  • 如果可能的话,使用新的查询执行引擎。

  • 如果使用新的查询执行引擎,查询解释计划输出中将包含新字段。

从 6.0 版开始,满足特定条件时,MongoDB 使用基于槽的查询执行引擎执行符合条件的 $group$lookup 阶段。

更多信息,请参阅基于插槽的查询执行引擎管道优化

可以使用 planCacheSize 参数为新查询引擎设置计划缓存的大小。

增加计划缓存大小可为查询规划器添加更多缓存的查询结构。这可以提高查询性能,但会增加内存使用量。

以下部分将介绍 MongoDB 6.0 中引入的 Stable API 新增功能。

要查看稳定版 API 中的可用数据库命令完整列表,请参阅稳定版 API 变更日志。

从 MongoDB 6.0 开始,Stable API 支持以下数据库命令:

命令
说明
Stable API 版本
计算集合或视图中的文档数量。(从 MongoDB 5.0.9 开始的 5.0 系列部署的对应稳定版 API 中也可使用。)
V1

从 MongoDB 6.0 开始,稳定版 API 支持以下聚合阶段和操作符:

阶段或操作符
说明
Stable API 版本
根据指定的排序顺序返回群组内的最后一个元素。
V1
根据指定的排序顺序,返回群组内后 n 个元素的聚合。
V1
Date() 对象递增指定数量的时间单位。
V1
返回两个日期之间的差值。
V1
Date() 对象递减指定数量的时间单位。
V1
截断日期。
V1

在文档序列中创建新文档,其中缺少字段中的某些值。

V1
$firstN (聚合累加器)
返回群组内前 n 个元素的聚合。
V1
$firstN (数组操作符)
从数组开头返回指定数量的元素。
V1
从文档中返回指定字段的值。
V1
$lastN (聚合累加器)
返回群组内后 n 个元素的聚合。
V1
$lastN (数组操作符)
从数组末尾返回指定数量的元素。
V1

最后一次的观察结果被延续了下来。将窗口null 和缺失字段的值设置为该字段的最后一个非 null 值。

V1
$maxN (聚合累加器)
返回群组内 n 个最大值元素的聚合。
V1
$maxN (数组操作符)
返回数组中 n 个最大值。
V1
$minN (聚合累加器)
返回群组内 n 个最小值元素的聚合。
V1
$minN (数组操作符)
返回数组中 n 个最小值。
V1
添加、更新或删除文档中的指定字段。
V1
对集合中指定范围的文档(称为窗口)执行操作,并根据所选窗口运算符返回结果。
V1
根据数组的元素对数组排序。
V1
根据指定的排序顺序返回群组内第一个元素。
V1
根据指定的排序顺序,返回群组内前 n 个元素的聚合。
V1

long 形式返回时间戳中的递增序数。

V1

long 形式返回时间戳中的秒数。

V1

从 MongoDB 6.0 开始,稳定版 API 支持以下窗口运算符:

窗口操作符
说明
Stable API 版本
返回对每份文档应用表达式所产生的所有唯一值的数组。
V1
返回指定表达式的平均值。忽略非数字值。
V1
返回群组或窗口中的文档数。
V1
返回两个数值表达式的总体协方差。
V1
返回两个数值表达式的样本协方差。
V1
返回某文档在 $setWindowFields 阶段分区中相对于其他文档的位置(称为排名)。这些排名没有差异。并列可获得相同排名。
V1
返回指定窗口内的平均变化率。
V1
返回文档在 $setWindowFields 阶段分区中的位置(称为文档编号)并列会导致相邻文件编号不同。
V1
返回数值表达式的指数移动平均值。
V1
返回将表达式应用于群组或窗口中的第一份文档所得的值。
V1
返回曲线下面积的近似值。
V1
返回将表达式应用于群组或窗口中的最后一份文档所得的值。
V1

最后一次的观察结果被延续了下来。将窗口null 和缺失字段的值设置为该字段的最后一个非 null 值。

V1
返回对每份文档应用表达式后的最小值。
V1
返回对每份文档应用表达式后的最小值。
V1
返回对每个文档应用表达式后所得值的数组。
V1
返回一个文档在 $setWindowFields 阶段分区中相对于其他文档的位置(称为排名)。
V1
返回在 $setWindowFields 阶段的分区中,应用于目标文档的表达式的值。目标文档通过与当前文档的相对位置进行指定。
V1
返回对每个文档应用数值表达式所得的总体标准差。
V1
返回对每个文档应用数值表达式所得的样本标准差。
V1
返回对每份文档应用数值表达式所得的总和。
V1

以下各部分将介绍时间序列集合的改进和新功能。

MongoDB 5.1 支持分片时间序列集合

请参阅:

从 MongoDB 6.0 开始,可以修改分片时间序列集合的颗粒度。

从 MongoDB 5.1 开始,时间序列集合支持有限制的更新和删除操作

从 MongoDB 5.2 开始,时间序列集合采用列压缩技术。列压缩引入了多项创新,这些创新点协同运作,显著改进了实际压缩效率、减少了数据在磁盘上的整体存储量,并提升了读取性能。

从 MongoDB 6.0 开始,数组也作为时间序列列压缩的一部分进行压缩。

从 MongoDB 5.3 开始,您可以对时间序列集合中的任何字段使用 $geoNear 管道操作符。

您可以为时间序列集合添加其他二级索引类型,包括 2dsphere2d 索引。

关于所有其他索引和其他改进,请参阅 MongoDB 6.0 及更高版本中的时间序列二级索引。

对时间序列集合进行排序可以使用索引来提高性能。更多信息和示例,请参阅使用二级索引提高排序性能。

从 MongoDB 7.0.3(以及 6.0.12 和 5.0.22)开始,您可以删除哈希分片键的索引。

这可以加快使用哈希分片键分片的集合的数据插入速度。在使用 mongosync 时,这还可以加快数据摄取速度。

有关详细信息,请参阅删除哈希分片键索引

从 MongoDB6 开始。0 。7 ,FIPS 模式支持 OpenSSL3 适用于以下操作系统:

  • Ubuntu 22.04

  • RHEL 9

  • Amazon Linux 2023

从 MongoDB 6.0 开始,您可以使用 collMod 命令更改固定大小集合的最大大小(以字节为单位或以文档数为单位)。有关更多详情,请参阅调整固定大小集合的大小

从 MongoDB 6.0 开始,collStats 输出包含 collStats.numOrphanDocs 字段,该字段显示集合中的孤立文档数量。

从 MongoDB 6.0(和 5.0.9)开始,您可以从serverStatus输出中排除嵌入式字段。

从 MongoDB 6.0 开始,Mongo() 连接对象具有以下新方法:

从 MongoDB 6.0(和 5.0.10)开始,支持在arm64生成诊断回溯

从 MongoDB 5.2 开始,您可以使用以下新服务器参数来配置缓存 LDAP 用户信息的刷新间隔:

从 MongoDB 5.2 开始,从 LDAP 服务器检索的缓存用户信息的更新间隔取决于 ldapShouldRefreshUserCacheEntries

有些更改会影响兼容性,可能需要用户执行操作。如需兼容性变更的详细列表,请参阅 MongoDB 6.0 中的兼容性变更。

重要

特征兼容性版本

要从 MongoDB 5.0 部署升级到 MongoDB 6.0,5.0 部署必须将 featureCompatibilityVersion 设置为 5.0。要检查版本:

db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )

要升级到 MongoDB 6.0,请参阅 MongoDB 部署对应的升级说明:

如果您需要有关升级到6的指导。 0 ,MongoDB 专业服务提供主要版本升级支持,帮助确保 MongoDB 应用程序平稳过渡而不中断。要了解更多信息,请参阅MongoDB 咨询。

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

例如,您可以将 6.0 系列部署降级为 5.0 系列部署。但是,不支持将 5.0 系列部署进一步降级为 4.4 系列部署。

要下载 MongoDB 6 。 0 ,转到MongoDB 下载中心。

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

版本中
问题
状态
6.0.0
SERVER-68062 :使用 $geoNear 的多阶段聚合可能会违反约束条件。
已在 6.0.1 中解决。

要报告问题,请参阅 MongoDB GitHub 存储库,了解有关如何为 MongoDB 服务器或其中一个相关项目提交 JIRA 工单的说明。

← 将分片集群升级至 7.0