MongoDB 6.0的发布说明
本页面介绍了MongoDB 6.0中引入的更改和新功能。
MongoDB 6.0是一个主要版本,这意味着它支持MongoDB Atlas和本地部署。MongoDB 6.0包括MongoDB快速版本5.1、5.2和5.3中引入的更改。本页面介绍了这些快速发布和MongoDB 6.0中引入的变化。
要了解有关Major和Rapid版本之间差异的更多信息,请参阅MongoDB版本控制。
集合
新的聚合阶段
MongoDB 6.0引入了以下聚合阶段:
阶段 | 描述 |
---|---|
$densify |
在缺少指定字段值的文档序列中创建新文档。 |
$documents |
从输入表达式返回字面文档。 |
$fill |
在文档中填充null 和缺失字段值。 |
$shardedDataDistribution |
6.0.3版本的新功能:提供有关分片收集的大小和数据分发信息。 |
新的聚合运算符
MongoDB 6.0引入了以下聚合运算符:
运算符号 | 描述 |
---|---|
$bottom |
根据指定的排序顺序返回组中的底部元素。 |
$bottomN |
根据指定的排序顺序返回组中底部n 元素的聚合。 |
$firstN |
返回组中前n 元素的聚合。不同于$firstN 数组运算符。 |
$firstN (array operator) |
从数组开始返回指定数量的元素。不同于$firstN 累加器。 |
$lastN |
返回组中最后n 元素的聚合。不同于$lastN 数组运算符。 |
$lastN (array operator) |
从数组末尾返回指定数量的元素。不同于$lastN 蓄能器。 |
$linearFill |
使用线性插值基于周围的场值。 |
$locf |
最后的观察继续进行。将窗口中空null 和缺失字段的值设置为字段的最后一个非空值。 |
$maxN |
返回组中n 最大值元素的聚合。与$maxN 数组运算符区分开来。 |
$maxN (array operator) |
返回数组中的n 个最大值。不同于$maxN 累加器。 |
$minN |
返回组中n 最小值元素的聚合。与$minN 数组运算符区分开来。 |
$minN (array operator) |
返回数组中的n 个最小值。不同于$minN 累加器。 |
$sortArray |
根据数组的元素对数组进行排序。 |
$top |
根据指定的排序顺序返回组中的顶部元素。与命令top 区分开来。 |
$topN |
根据指定的排序顺序返回组中顶部n 元素的聚合。 |
$tsIncrement |
从时间戳返回long 的增量序数。 |
$tsSecond |
将时间戳中的秒数返回为long 。 |
$lookup
和$graphLookup
与分割集合
更改流
优化的更改流
从MongoDB 5.1开始,对更改流进行了优化,提供了更高效的资源利用率和一些聚合管道阶段的更快执行。
wallTime
更改流输出字段
从MongoDB 6.0开始,更改流输出具有一个新的wallTime
字段,其中包含数据库操作的服务器日期和时间。
使用图像前后文档更改流
从MongoDB 6.0开始,您可以使用更改流在更改前后输出文档的版本(文档图像前后)。有关示例,请参阅使用文档前后图像更改流。
更改流扩展事件
从MongoDB 6.0开始,更改流可以显示DDL操作的其他更改事件,例如创建索引和删除集合。
有关更多信息,请参阅扩展事件。
集群管理
集群服务器参数
从MongoDB 6.0开始,您可以使用MongoDB集群参数来修改和检索副本集或分片集群中所有节点的配置选项。您可以使用setClusterParameter
修改集群范围的选项,并使用getClusterParameter
检索集群参数的值。
连接池参数
从MongoDB 6.0开始,您可以使用ShardingTaskExecutorPoolMinSizeForConfigServers
和ShardingTaskExecutorPoolMaxSizeForConfigServers
为配置服务器设置最小和最大分片TaskExecutor连接池大小。
changeStreamOptions
集群参数
从MongoDB 6.0开始,您可以使用changeStreamOptions
来控制图像前后更改流的保留策略。
internalSessionsReapThreshold
参数
从MongoDB 6.0开始,您可以使用新的internalSessionsReapThreshold
参数来设置内部会话元数据删除的会话限制。
不支持多个仲裁器
从MongoDB 5.3开始,默认情况下禁用对副本集中多个仲裁器的支持。要启用对多个仲裁器的支持,请使用allowMultipleArbiters
参数启动每个节点。
群集集合
从MongoDB 5.3开始,您可以创建具有集群索引的集合。使用集群索引创建的集合称为集群集合。
要了解与普通集合相比的好处,请参阅集群集合。
索引
从MongoDB 5.1开始,您可以使用collMod
数据库命令将expireAfterSeconds
选项添加到现有的单字段非TTL索引中。
从MongoDB 6.0开始,您可以使用collMod
命令的prepareUnique
和unique
选项将现有标准索引转换为唯一索引。
部分索引
从MongoDB 6.0开始,您可以使用运算符$in
和$or
创建部分索引。partialFilterExpression
的最大深度也从2扩展到4。您现在可以在非顶级级别使用运营商$and
和$or
。
安装
SELinux 政策
从MongoDB 5.1开始,有一个新的SE Linux策略用于:
- MongoDB企业服务器
- MongoDB社区版服务器
在Red Hat Linux上运行。SELinux策略适用于使用rpm
安装程序包的默认安装。
复本集
不支持多个仲裁器
从MongoDB 5.3开始,默认情况下禁用对副本集中多个仲裁器的支持。要启用对多个仲裁器的支持,请使用allowMultipleArbiters
参数启动每个节点。
initialSyncMethod
参数
从MongoDB 5.2开始,initialSyncMethod
确定初始同步是逻辑初始同步还是基于文件副本的初始同步。
initialSyncMethod
仅在MongoDB企业服务器中可用。
指定辅助操作日志批处理延迟
从MongoDB 6.0开始,您可以使用oplogBatchDelayMillis
服务器参数为次要的oplog批处理写入指定延迟。添加简短的操作日志批处理延迟可以减少次要的IOPS,但为写入关注"majority"
的写入增加延迟。
有关更多信息,请参阅oplogBatchDelayMillis
。
安全
审计日志加密
从MongoDB 6.0 Enterprise开始,您可以加密MongoDB审计日志。
要配置审计日志,请参阅使用KMIP服务器管理加密MongoDB审计日志的密钥。
分片
默认块大小从64 MB增加到128 MB
从MongoDB 5.2开始,默认块大小为128兆字节。在早期版本的MongoDB中,默认块大小为64兆字节。
enableSharding
不再需要
从MongoDB 6.0开始,不再需要enableSharding
命令来分片集合。
监控碎片整理状态
从MongoDB 5.3开始,balancerCollectionStatus
命令在经过块碎片整理的命名空间上运行时返回详细信息。输出包括碎片整理的当前阶段以及还剩下多少块需要处理。
要查看示例输出,请参阅正在进行的碎片整理过程。
基于Slot-Based的查询执行引擎
从MongoDB 5.1开始,MongoDB对符合条件的查询使用了一个新的查询执行引擎,称为基于槽的查询执行引擎。如果使用基于时隙的查询执行引擎,则在查询解释计划输出中包括新字段。
基于Slot-Based的查询执行引擎可以执行$group和$lookup阶段
从6.0版本开始,当满足某些条件时,MongoDB使用基于插槽的查询执行引擎执行符合条件的$group
和$lookup
阶段。
有关更多信息,请参阅基于插槽的查询执行引擎管道优化。
设置基于Slot-Based的查询执行引擎计划高速缓存大小
您可以使用planCacheSize
参数为新查询引擎设置计划缓存的大小。
增加计划缓存大小为查询规划器添加更多缓存查询形状。这可以提高查询性能,但可以增加内存使用量。
稳定的API
以下部分描述了MongoDB 6.0中引入的稳定API的添加。
要查看稳定API中可用的数据库命令的完整列表,请参阅稳定API更改日志。
数据库命令
从MongoDB 6.0开始,Stable API支持以下数据库命令:
指挥权 | 描述 | 稳定的API版本 |
---|---|---|
count |
计算集合或视图中的文档数量。(在稳定API中也可用于从MongoDB 5.0.9开始的5.0系列部署。) | V1 |
聚合阶段和操作员
从MongoDB 6.0开始,Stable API支持以下聚合阶段和运算符:
阶段或操作员 | 描述 | 稳定的API版本 |
---|---|---|
$bottom |
根据指定的排序顺序返回组中的底部元素。 | V1 |
$bottomN |
根据指定的排序顺序返回组中底部n 元素的聚合。 |
V1 |
$dateAdd |
按指定数量的时间单位增加Date() 对象。 |
V1 |
$dateDiff |
返回两个日期之间的差额。 | V1 |
$dateSubtract |
将Date() 对象减少指定数量的时间单位。 |
V1 |
$dateTrunc |
截断日期。 | V1 |
$densify |
在缺少字段某些值的文档序列中创建新文档。 | V1 |
$firstN (聚合蓄能器) |
返回组中前n 元素的聚合。 |
V1 |
$firstN (阵列操作员) |
从数组开始返回指定数量的元素。 | V1 |
$getField |
从文档返回指定字段的值。 | V1 |
$lastN (聚合蓄能器) |
返回组中最后n 元素的聚合。 |
V1 |
$lastN (阵列操作员) |
从数组末尾返回指定数量的元素。 | V1 |
$locf |
最后的观察继续进行。将窗口中的值null 和缺失字段设置为该字段的最后一个非空值。 |
V1 |
$maxN (聚合蓄能器) |
返回组中最大值n 元素的聚合。 |
V1 |
$maxN (阵列操作员) |
返回数组中的n 个最大值。 |
V1 |
$minN (聚合蓄能器) |
返回组中最小值n 元素的聚合。 |
V1 |
$minN (阵列操作员) |
返回数组中的n 个最小值。 |
V1 |
$setField |
添加、更新或删除文档中的指定字段。 | V1 |
$setWindowFields |
对集合中称为窗口的指定跨度的文档执行操作,并根据所选窗口运算符返回结果。 | V1 |
$sortArray |
根据数组的元素对数组进行排序。 | V1 |
$top |
根据指定的排序顺序返回组中的顶部元素。 | V1 |
$topN |
根据指定的排序顺序返回组中顶部n 元素的聚合。 |
V1 |
$tsIncrement |
将时间戳中的增量序数作为long 。 |
V1 |
$tsSecond |
从时间戳返回秒数。 | V1 |
窗口操作员
从MongoDB 6.0开始,Stable API支持以下窗口运算符
窗口操作员 | 描述 | 稳定的API版本 |
---|---|---|
$addToSet |
返回一个由应用于每个文档的表达式而产生的所有唯一值的数组。 | V1 |
$avg |
返回指定表达式的平均值。忽略非数字值。 | V1 |
$count |
返回组或窗口中的文档数量。 | V1 |
$covariancePop |
返回两个数字表达式的种群协方差。 | V1 |
$covarianceSamp |
返回两个数字表达式的样本协方差。 | V1 |
$denseRank |
返回相对于$setWindowFields 阶段分区中其他文档的文档位置(称为秩)。队伍中没有差距。领带获得相同的等级。 |
V1 |
$derivative |
返回指定窗口内的平均变化率。 | V1 |
$documentNumber |
返回文档在$setWindowFields 阶段分区中的位置(称为文档编号)。领带导致不同的相邻文档编号。 |
V1 |
$expMovingAvg |
返回数字表达式的指数移动平均线。 | V1 |
$first |
返回将表达式应用于组或窗口中的第一个文档所产生的值。 | V1 |
$integral |
返回曲线下面积的近似值。 | V1 |
$last |
返回将表达式应用于组或窗口中最后一个文档所产生的值。 | V1 |
$locf |
最后的观察继续进行。将窗口中的值null 和缺失字段设置为该字段的最后一个非空值。 |
V1 |
$max |
返回将表达式应用于每个文档得出的最大值。 | V1 |
$min |
返回将表达式应用于每个文档所产生的最小值。 | V1 |
$push |
返回对每个文档应用表达式所产生的值数组。 | V1 |
$rank |
返回相对于$setWindowFields 阶段分区中其他文档的文档位置(称为秩)。 |
V1 |
$shift |
返回应用于特定位置的文档的表达式相对于$setWindowFields 阶段分区中当前文档的值。 |
V1 |
$stdDevPop |
返回对每个文档应用数字表达式所产生的总体标准偏差。 | V1 |
$stdDevSamp |
返回对每个文档应用数字表达式所产生的示例标准偏差。 | V1 |
$sum |
返回对每个文档应用数字表达式所产生的总和。 | V1 |
时间序列集合
以下部分介绍了时间序列集合的改进和新功能
分片时间序列集合
参见:
分片时间序列粒度
从MongoDB 6.0开始,您可以修改分片时间序列集合的粒度。
更新和删除
从MongoDB 5.1开始,时间序列集合支持有限制的更新和删除操作。
时间序列列压缩
从MongoDB 5.2开始,时间序列集合使用列压缩。列压缩增加了许多创新,这些创新可以显著改善实际压缩,减少数据在磁盘上的整体存储,并提高读取性能。
从MongoDB 6.0开始,数组也作为时间序列列压缩的一部分进行压缩。
支持$geoNear
从MongoDB 5.3开始,您可以在时间序列集合中的任何字段上使用$geoNear
管道运算符。
其他次要索引类型
您可以向时间序列集合添加其他次要索引类型,包括2dsphere和2d索引。
有关所有其他索引和其他改进,请参阅MongoDB 6.0中的时间序列二级索引。
使用辅助索引对操作进行排序
对时间序列集合的排序操作可以使用索引来提高性能。有关更多信息和示例,请参阅使用辅助索引来提高排序性能。
一般改进
封闭集合的改进
从MongoDB 6.0开始,您可以使用collMod
命令更改封闭集合的的最大大小,无论是字节还是文档数量。有关更多详细信息,请参阅调整上限集合的大小。
numOrphanDocs
字段已添加到collStats命令中
从MongoDB 6.0开始,collStats输出包括collStats.numOrphanDocs
字段,该字段显示集合中孤儿文档的数量。
排除serverStatus
输出中的嵌入式字段
从MongoDB 6.0(和5.0.9,4.4.15)开始,您可以从serverStatus
输出中排除嵌入式字段。
连接
从MongoDB 6.0开始,Mongo()
连接对象具有以下新方法:
支持诊断回溯生成arm64
从MongoDB 6.0(和5.0.10,4.4.15)开始,支持在arm64
中生成诊断回溯。
影响兼容性的变化
一些更改可能会影响兼容性,可能需要用户采取行动。有关兼容性更改的详细列表,请参阅MongoDB 6.0中的兼容性更改。
升级程序
重要:
功能兼容性版本
要从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中的已知问题及其解析状态。
在版本中 | 发行 | 状态 |
---|---|---|
6.0.0 | 服务器-68062:使用$geoNear的多阶段聚合可能会违反约束。 | 在6.0.1中解决。 |
报告问题
要报告问题,请参阅https://github.com/mongodb/mongo/wiki/Submit-Bug-Reports关于如何为MongoDB服务器或相关项目之一提交JIRA票据的指导。