Docs 主页 → 开发应用程序 → MongoDB Manual
MongoDB 5.0 发布说明
在此页面上
注意
MongoDB 5.0,2021 年 7 月 13 日发布
补丁版本
警告
过去的版本限制
以下关键公告会影响某些先前的 MongoDB 版本。如果您的部署依赖于受关键报告影响的功能,请升级到最新的可用补丁版本。
问题 | 受影响的版本 |
---|---|
5.0.0 - 5.0.2 | |
5.0.0 - 5.0.2 | |
5.0.0 - 5.0.14(ARM64 或 POWER 系统架构) | |
5.0.2 - 5.0.17(Ops Manager 或 Cloud Manager 集群上的增量备份) | |
5.0.0 - 5.0.1 | |
5.0.0 - 5.0.21 | |
5.0.0 - 5.0.10 | |
5.0.6 - 5.0.21(由 metaField 嵌入式对象分片的时间序列集合) |
5 。 0 。 26 - 3 月26 、 2024
SERVER-68128 生成命令响应时抛出异常会导致网络错误
SERVER-72703 将 $out 的数据库锁降级为 MODE_IX
SERVER-83602 $or -> $in MatchExpression 重写不应生成直接嵌套在另一个 $or 中的 $or
SERVER-86717 重新分片应验证用户提供的区域范围不包括 $ 前缀字段。
WT-11062 安全释放引用地址以允许并发访问
5 。 0 。 25 - 2 月28 、 2024
重要
修复 MongoDB Server 可能允许成功的不可信连接
由于 CVE- 2024 - 1351 ,在 MongoDB 5中。 0之前的5 。 0 。 25 ,在 --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-64444 listIndexes 在处理无效的 pre-5 0时失败。升级后的 索引规范
SERVER-82353 movePrimary 同时运行时,多文档事务可能会丢失文档
SERVER-83564 确保在 config.locks 中对流程字段进行索引
SERVER-85419 如果在清空期间找不到合适的接收者,负载均衡器会污染日志
WT-10017 在回滚到稳定版本结束时删除不稳定的历史版本
5.0.24 - 2024 年 1 月 18 日
SERVER-50792 当找不到 shardCollection/refineCollectionShardKey 的分片键索引时,返回更多有用的错误
SERVER-77506 分片多文档事务可能会导致数据和 ShardVersion 不匹配
SERVER-81878 startupRecoveryForRestore 可能无法与启动恢复期间应用的集合删除良好配合
SERVER-83091 $or 查询可在计划枚举期间触发无限循环
WT-7929 研究避免 FTDC 在检查点期间停止的解决方案
5.0.23 - 2023 年 11 月 27 日
SERVER-78108 POS 接口应公开其关闭状态
SERVER-78115 在使用来自配置服务器的新路由信息之前,分片主节点必须提交多数写入
SERVER-83150 Document::shred() 不会复制文档元数据
WT-11564 修复 RTS 以仅读取检查点中存在的最新事务值
WT-11602 隐藏应用程序中预期的逐出失败,出现错误时不回滚
5.0.22 - 2023 年 10 月 26 日
SERVER-68548 MongoDB Shell 版本4 。4 。15 记录 asio 消息,尽管有 --quiet 标志
SERVER-80021 使 $convert 在双精度和字符串之间正确往返
SERVER-80703 避免在 MigrationDestinationManager 中遍历路由表
SERVER-81106 接收分片在开始克隆阶段之前不会等待集合版本在本地持久化
WT-11064 在更新过时检查中跳过全局可见的逻辑删除
5.0.21 - 2023 年 9 月 12 日
SERVER-60466 在运行 addShard 之前,支持驱动程序将签名的 $clusterTimes 传送到副本集 --shardsvrs
SERVER-71627 当具有 百万数据段的集群时,刷新的缓存集合路由信息将严重阻止所有客户端请求1
SERVER-78813 提交点传播无限期失败,耗尽游标的 lastCommitted optime 为空
WT-10759 在协调期间不要重试强制逐出历史存储页面
WT-11051 修复聚合时间戳验证中的最新启动持久时间戳比较问题
5.0.20 - 2023 年 8 月 14 日
SERVER-74954 包含 $or 重写 $elemMatch 额外条件时结果不正确
SERVER-78813 提交点传播无限期失败,耗尽游标的 lastCommitted optime 为空
SERVER-79136 MetaField 上的 $match + $group 在时间序列上的查询结果不正确
WT-10449 没有要写入历史记录存储的更新时,请勿保存更新链
WT-11031 修复 RTS 以跳过检查点中没有时间窗口信息的表
5.0.19 - 2023 年 7 月 13 日
SERVER-71985 出现 DuplicateKey 错误时自动重试时间序列插入
SERVER-74551 升级到 mongo 后,在 findAndModify 期间,不必要将 WriteConflictException5 记录为警告。0
SERVER-77018 dbStats 和 索引构建之间的死锁2
SERVER-78126 对于特定类型的输入,mongo::Value() 在大端平台上始终会哈希得到相同的结果
WT-10253 更频繁地运行会话 dhandle 扫描和会话游标扫描
5.0.18 - 2023 年 5 月 18 日
修复的问题:
SERVER-48196 将时间库升级到最新版本,将内置时区文件更新到最新版本
SERVER-54150 当 oplog 应用程序出现故障时,应从稳定的检查点恢复
SERVER-57056 为 INFO 消息设置的系统日志严重性不正确
SERVER-72686 在时间序列集合上添加对 $collStats agg 阶段的支持
WT-10551 增量备份可能会遗漏已修改的区块
5.0.17 - 2023 年 4 月 27 日
修复的问题:
SERVER-73229 逻辑会话缓存刷新忽略更新会话文档产生的写入错误,导致游标被提前终止
SERVER-74647 应在中断后重试重新分片状态机创建
SERVER-75261 “listCollections”命令失败,出现 BSONObjectTooLarge 错误
SERVER-75431 删除或修复分片集群中重命名路径上主数据库的尽力而为检查
SERVER- 允许使用76098 $search 和非简单排序规则进行查询
5.0.16 - 2023 年 4 月 10 日
修复的问题:
SERVER-61909 在插入或删除包含大量索引项的文档时挂起
SERVER-73822 时间序列 $group 重写忽略某些累加器
SERVER-74345 mongodb-org-server4 4195。 。 、 。0 。15 6、0 。5 。从旧版本(Debian、RPM 软件包)升级后, 未启动
SERVER-74501 修复 MigrationBatchFetcher/Inserter 完成依赖,以免生成额外的清理线程
SERVER-75205 当所有读取票证耗尽时,降级和释放锁后恢复之间的死锁
5.0.15 - 2023 年 2 月 27 日
修复的问题:
SERVER-54900 阻止网络调用会无限期延迟同步源解析
SERVER-72416 find 和 findAndModify 投影代码不支持集合级别排序规则
SERVER-71759 dataSize 命令不会产生
SERVER-72222 在分片集群中合并结果时,具有单一 reduce 优化的 MapReduce 失败
WT-9268 将删除历史存储记录延迟到调节
5.0.14 - 2022 年 11 月 21 日
修复的问题:
SERVER-68477 改进 expireAfterSeconds TTL 索引参数的 NaN 处理
SERVER-66289 $out 在 v 上错误地抛出 BSONObj5 0大小错误。 。8
SERVER-61185 使用 prefix_search 进行唯一索引查找
SERVER-68115 “elemMatchRootLength >0 ”不变触发器的错误修复
SERVER-68139 如果投影排序大于100 MB,则重新分片命令会失败
5.0.13 - 2022 年 9 月 29 日
修复的问题:
SERVER-69611 将 -ffp-contract=off 编译器选项设置为默认值
SERVER-69220 细化CollectionShardKey允许在基于范围和哈希之间切换当前的分片键字段,从而导致数据不一致
SERVER-67650 0当 oplog 应用程序未跟上 oplog 获取程序时,重新分片接收方可以返回剩余操作时间估计秒数=
SERVER-68094 使用自定义生成的 _id 重新分片失败,并出现投影错误
WT-9870 修复在恢复期间更新最旧时间戳时更新固定时间戳的问题
5.0.12 - 2022 年 9 月 5 日
修复的问题:
SERVER-68925 在启动时重新引入检查表日志记录设置(恢复 SERVER-43664 )
SERVER-63852 getThreadName() 不应崩溃
SERVER-60958 发生降级事件时,避免服务器在数据段迁移中挂起
SERVER-65382 AutoSplitVector 不应使用 clientReadable 对分片键字段重新排序
SERVER-63843 不允许在同步信号处理程序中使用递归 doLog
5.0.11 - 2022 年 8 月 19 日
修复的问题:
SERVER- 条目的68511 MovePrimary
config.databases
更新必须使用点字段表示法SERVER-61321 改进文本索引版本对大值/NaN 值的处理
SERVER-60607 改进对地理索引版本的大值/NaN 值的处理
SERVER-68628 在主节点故障转移后重试失败的重新分片操作可能会导致服务器崩溃或写入丢失
SERVER-68522 防止5 。从0 fCV 开始的4 二进制文件。4 的 TTL 索引配置错误
WT-9500 修复 RTS 以使用单元时间窗口而不是 HS 更新的键/值时间戳
5.0.10 - 2022 年 7 月 29 日
修复的问题:
SERVER-66418 由于字符串顺序假设,在依赖分析期间创建了错误的投影
SERVER-65821 在 setFCV 期间,如果准备好的事务尚未持久保存提交/中止决策,则会出现死锁
SERVER-65131 禁用机会性读取定位(对冲读除外)
SERVER-63971 在2 PC 事务后,将服务器参数更改为默认的读你所写行为
SERVER-66433 向后移植等待重叠范围删除完成的截止时间到5 1之前的版本。 版本
5.0.9 - 2022 年 5 月 31 日
修复的问题:
SERVER-65636 取消对每台主机的 LDAP 连接数限制
SERVER-65137 在让出后刷新集合时检测命名空间更改
SERVER-64822 对空集合进行分片过早释放关键部分
SERVER-62175 Mongos 无法为 _parseCommand 中中断的命令附加 RetryableWrite 错误标签
WT-9096 修复当键不存在时搜索有时会返回错误的键/值的问题
5.0.8 - 2022 年 4 月 25 日
修复的问题:
SERVER-63531 commitQuorum 错误地包含 buildIndexes:false 节点,并且错误消息错误地说明只有投票节点才有资格
SERVER-633871 StreamingCursor 应按照从 WiredTiger 备份游标检索备份块的顺序返回备份块
SERVER-62229 修复在recoverFromOplogAsStandalone=true 时应用索引构建条目时的不变量
SERVER-61879 用于恢复迁移的刷新绝不能加入正在进行的刷新
WT-8924 检查行存储中的冲突时,如果存在插入列表,请勿检查磁盘时间窗口
5.0.7 - 2022 年 4 月 11 日
修复的问题:
SERVER-64517 RecoverableCriticalSection 在启动时未正确恢复
SERVER-64403 查找具有 SORT_MERGE 排序规则的查询,对缺失的排序属性进行编码
SERVER-63742 分片中的默认拓扑时间可能会导致分片注册表中的无限刷新
SERVER-60412 主机内存限制检查不支持 cgroups v2
WT-7922 处理缺失的 WiredTiger 版本文件
5.0.6 - 2022 年 1 月 31 日
修复的问题:
WT-8395 从4 升级后,数据不一致。4 344。4 和4 。4 。 改为 。 。8 + 和5 。0 。2 +
SERVER-62245 MigrationRecovery 不得假设只需恢复一个迁移
SERVER-61427 由于检查了许多错误的重复项,唯一索引构建可能会在提交期间导致可用性损失
SERVER-61194 以粗粒度防止时间序列存储桶 OID 重用
SERVER-60310 OCSP 响应验证不应考虑不相关证书的状态
5.0.5 - 2021 年 12 月 6 日
修复的问题:
SERVER-61483 重新分片协调器无法恢复升级时的中止决策,尝试将操作提交为成功,从而导致数据不一致
SERVER-59858 为 Reactor 线程上计划的任务添加可观察性
SERVER-51329 关闭 mongos 服务器时出现意外的不可重试错误
WT-8163 考虑更多驱逐场景以放弃 checkpoint-cleanup
WT-7912 修复接近优化的前缀搜索,以处理键范围跨页面分割的情况。
5.0.4 - 2021 年 11 月 15 日
修复的问题:
SERVER-60326 当 X 证书的主题名称为空时,Windows Server 无法启动509
SERVER-59876 建立出口连接时,从 libcrypto.so 返回存在较大延迟
SERVER-59456 启动 LDAPReaper 线程池
SERVER-59226 在配置文件会话标记为不间断的情况下退出时出现死锁
SERVER-59074 不要仅仅为了设置/等待 oplog 可见性而获取存储票证
5.0.3 - 2021 年 9 月 21 日
修复的问题:
SERVER-57667 :提高重新分片集合克隆管道的处理速度
SERVER-57630 :在 Ubuntu 上启用 SSL_OP_NO_RENEGOTIATION。18 04(针对 OpenSSL1 1运行时)。 。1
WT-8005 :修复了一个准备提交错误,该错误可能导致历史存储条目未解析
WT-7995 :修复全局可见性,使其无法超越检查点可见性
WT-7984 :修复可能导致检查点遗漏数据页的错误
5.0.2 - 2021 年 8 月 4 日
修复的问题:
SERVER-58936 :可能不会强制执行唯一索引约束
SERVER-57756 :并发降级和应用事务 oplog 条目之间的争用
SERVER-54729 :MongoDB Enterprise Debian/Ubuntu 软件包应依赖于 libsasl2 -modules 和 libsasl2 -modules-gssapi-mit
SERVER-47372 :即使删除集合后,config.cache 集合仍可保留
WT-6729 :在运行回滚到稳定版的活动事务检查之前停止逐出
5.0.1 - 2021 年 7 月 22 日
修复的问题:
SERVER-58489 :当视图具有重复的名称时,集合创建陷入无限 writeConflictRetry 循环
SERVER-58171 :更改时间序列粒度不会更新视图定义
5.0.0 - 2021 年 7 月 13 日
本页其余部分提供了 5.0.0 发布说明:
时间序列集合
MongoDB 5.0 引入了时间序列集合,可有效存储一段时间内的测量序列。与普通集合相比,在时间序列集合中存储时间序列数据可提高查询效率,减少数据和索引的磁盘使用量。
聚合(Aggregation)
新聚合操作符
MongoDB 5.0 引入了以下聚合操作符:
Operator | 说明 |
---|---|
注意消歧 | |
将Date对象递增指定数量的时间单位。 | |
返回两个日期之间的差值。 | |
将Date对象递减指定数量的时间单位。 | |
截断日期。 | |
从文档中返回指定字段的值。您可以使用 $getField 检索名称中包含句点 (. ) 或以美元符号 ($ ) 开头的字段的值。 | |
每次调用 $rand 方法时,都会生成一个介于0和1之间的随机浮点值。新的$sampleRate 操作符基于$rand 。 | |
新增 $sampleRate 方法,基于概率以给定速率从管道中选择文档。 | |
添加、更新或删除文档中的指定字段。您可以使用 $setField 添加、更新或删除名称包含句点 (. ) 或以美元符号 ($ ) 开头的字段。 | |
删除文档中的指定字段。 $setField 的别名,用于删除名称中包含句点 (. ) 或以美元符号 ($ ) 开头的字段。 |
窗口运算符
MongoDB 5.0 引入了 $setWindowFields
管道阶段,允许您对集合中指定范围的文档(称为窗口)执行操作。该操作根据所选窗口运算符返回结果。
例如,您可以使用 $setWindowFields
阶段来输出:
集合中两个文档之间的销售额差异。
销售排名。
累计销售总额。
分析复杂的时间序列信息,而无需将数据导出到外部数据库。
常规聚合改进
$expr
运算符:比较运算符使用索引
从 MongoDB 5.0 开始,放置在 $expr
运算符中的 $eq
、$lt
、$lte
、$gt
和 $gte
运算符可以使用索引来提高性能。
$ifNull
表达式接受多个输入表达式
从 MongoDB 5.0 开始,在返回替换表达式之前,可以为 $ifNull
表达式指定多个输入表达式。
let
聚合选项
从 MongoDB 5.0 开始,aggregate
命令和db.collection.aggregate()
辅助方法提供一个 let
选项,用于指定可在 aggregation pipeline 其他地方使用的变量列表。这样可以将变量与查询文本分开,从而提高命令的可读性。
$lookup
阶段:简洁关联子查询
从 MongoDB 5.0 开始,aggregation pipeline $lookup
阶段支持简洁关联子查询,可改善集合之间的联接。
$lookup
阶段:非关联子查询
从 MongoDB 5.0 开始,对于包含 $sample
阶段、$sampleRate
操作符或 $rand
操作符的 $lookup
管道阶段中的非关联子查询,如果重复此子查询,此子查询总是会再次运行。以前,根据子查询输出大小,要么缓存子查询输出,要么再次运行子查询。
$sort
阶段:性能改进
从 MongoDB 5.0 开始,查询优化器会将 $project
阶段的结果下推到 $sort
阶段。因此,与 project
阶段一起使用时,$sort
操作所需的 RAM 可能更少,从而避免 Sort exceeded memory limit
错误。
审核
运行时审核筛选器配置
MongoDB 5.0 增加了在运行时配置审核筛选器的功能。
Operator | 说明 |
---|---|
定义检查审核配置的轮询间隔 | |
常规审核更新
从 MongoDB 5.0 开始:
系统事件审核具有:
新增审核消息类型:clientMetadata、directAuthMutation、注销和启动。
针对以下现有审核消息类型新增了信息和日志场景:authCheck、authenticate、createCollection、createIndex 和 dropCollection。
固定大小集合
固定大小集合删除操作被复制到从节点
允许对固定大小集合进行显式删除
Change Streams
变更事件输出
从 MongoDB 5.0 开始,变更事件包含用于记录数组截断的字段 updateDescription.truncatedArrays
。
索引
部分索引行为变更
从 MongoDB 5.0 开始,只要 partialFilterExpression 字段不表示等效筛选器,就可以使用相同的键模式创建多个部分索引。
在 MongoDB 早期版本中,当使用相同的键模式和不同的 partialFilterExpressions 时,不允许创建多个部分索引。
唯一稀疏索引行为变化
从 MongoDB 5.0 开始,具有相同键模式的唯一稀疏和唯一非稀疏索引可以存在于同一个集合中。
请参阅创建唯一稀疏索引
在索引构建过程中无法删除Ready
索引
如果有任何正在进行的索引构建,则 db.collection.dropIndexes()
命令无法删除就绪索引。
在 MongoDB 4.4.0-4.4.4 版本中,由于存在错误,此逻辑不成立。
前台验证可以修复多键元数据不一致的问题
在 MongoDB 部署上运行时,db.collection.validate()
会尝试修复独立部署中多键元数据不一致的问题。
删除geoHaystack
索引和geoSearch
命令
MongoDB 5.0 删除了已弃用的geoHaystack索引和geoSearch
命令。 请改用带有 的 2d $geoNear
索引 或受支持的 地理空间查询操作符 之一。
将 MongoDB 实例升级到 5.0 并将 FeatureCompatibilityVersion 设置为 5.0
会删除所有先前存在的 geoHaystack 索引。
新的错误消息
当选项指定错误时,db.collection.createIndex()
和 db.collection.createIndexes()
操作会出现新的错误信息。
索引构建中断
如果副本集中的某个节点在索引构建期间完全关闭或回滚,则索引构建进度现在会保存到磁盘。服务器重新启动时,索引创建将从保存的位置恢复。
reIndex
行为变更
从 MongoDB 5.0 开始,reIndex
命令和 db.collection.reIndex()
shell 方法只能在独立实例上运行。
已删除的命令
从 MongoDB 5.0 开始,已删除以下数据库命令和 mongo
Shell 助手方法:
副本集
非事务性读取 config.transactions
从 MongoDB 5.0 开始,不允许对具有以下读关注(read concern)和选项的 config.transactions
集合进行非事务性读取:
"majority"
,且设置了 afterClusterTime 选项在 因果一致的会话 中使用 MongoDB
"majority"
驱动程序 和 时
hello
命令
从 MongoDB 5开始。引入0 、 hello
命令和db.hello()
方法,以替换isMaster
命令和db.isMaster()
方法。新的拓扑结构connections.exhaustHello
在connections
中进行追踪。
静止期
从 MongoDB 5.0 开始,mongod
和 mongos
进入静止期,允许任何正在进行的数据库操作在关闭之前完成。
已删除members[n]._id
值的限制
从 MongoDB 5.0 开始,members[n]._id
字段可以是任何大于或等于 0
的整数值。以前,该值仅限于 0
和 255
(含)之间的整数。
enableMajorityReadConcern
不可配置
从 MongoDB 5.0 开始,由于改进了存储引擎,enableMajorityReadConcern
和 --enableMajorityReadConcern
不可更改,并始终设置为 true
。
在 MongoDB 的早期版本中,enableMajorityReadConcern
和 --enableMajorityReadConcern
均可配置,可以设置为 false
,以防止由三个节点组成的主-从-仲裁 (PSA) 架构的部署因存储缓存压力而停止运行。
如使用主节点-从节点-仲裁节点 (PSA) 三成员架构,请考虑以下因素:
如果从节点不可用或滞后,写关注
"majority"
可能会导致性能问题。有关如何缓解这些问题的建议,请参阅缓解 PSA 副本集的性能问题。如果使用的全局默认值
"majority"
,并且写关注小于大多数的大小,则您的查询可能会返回过时(未完全复制)的数据。
增强线程池超时控制
从 MongoDB 5.0 开始,您可以使用新的 replWriterMinThreadCount
服务器参数来允许关闭高于此最小值的空闲线程。当 replWriterMinThreadCount
配置为小于 replWriterThreadCount
的值时,高于 replWriterMinThreadCount
的空闲线程会超时。
重新配置 PSA 副本集
当重新配置主从仲裁 (PSA) 副本集或更改为 PSA 架构时,现在在某些情况下需要以两步更改的方式执行重新配置。MongoDB 5.0 引入了 rs.reconfigForPSASet()
方法来执行这两个步骤。如果无法使用辅助方法,请按照安全修改 PSA 副本集中的步骤操作。
限制同步源的重新评估
maxNumSyncSourceChangesPerHour
确定在节点暂时停止重新评估同步源之前,每小时可以发生多少次同步源更改。如果一个节点没有同步源,此参数不会阻止该节点从另一个节点开始同步。
enableOverrideClusterChainingSetting
服务器参数
从 MongoDB 5开始。 0 。 2 ,您可以将新的enableOverrideClusterChainingSetting
服务器参数设置为true
,以允许从节点从其他从节点复制数据,即使settings.chainingAllowed
为false
也是如此。
安全性
支持在线证书轮换
从 MongoDB 5.0 开始,您现在可以按需轮换以下 TLS 证书,而无需先停止正在运行的 mongod
或 mongos
实例:
CRL (Certificate Revocation List) files
(在 Linux 和 Windows 平台上)
要轮换这些证书,请将文件系统中的证书文件替换为更新版本,然后使用 rotateCertificates
命令或 db.rotateCertificates()
shell 方法触发证书轮换。
以这种方式轮换证书不需要停机,也不会中断任何活动的远程连接。
有关详细信息,请参阅在线证书轮换。
支持配置 TLS 1.3 密码套件
MongoDB 5.0 引入了 opensslCipherSuiteConfig
参数,以便在使用 TLS 1.3 加密时能够对 OpenSSL 应允许的受支持密码套件进行配置。
TLS 连接 X509 证书启动警告
从 MongoDB 5.0 开始,mongod
和 mongos
现在会在其证书不包含主题备用名称属性时,在启动阶段发出警告。
以下平台不支持通用名称验证:
iOS 13 及更高版本
MacOS 10.15 及更高版本
Go 1.15 及更高版本
使用这些平台的客户端不会向使用 x.509 证书(其主机名由 CommonName 属性指定)的 MongoDB 服务器进行身份验证。
ApplyOps 特权操作
MongoDB 5.0 引入了 applyOps
特权操作,该操作由 dbAdminAnyDatabase
继承。
分片集群
重新分片
理想的分片键可以让 MongoDB 在整个集群中平均分配文档,同时也有利于实施常见的查询模式。由于数据分配不平均,次优的分片键可能会导致性能或扩展问题。从 MongoDB 5.0 开始,您可以使用 reshardCollection
命令来更改集合的分片键,从而更改集群中的数据分配情况。
currentOp
报告正在进行的重新分片操作
从 MongoDB 5.0 开始,$currentOp
聚合阶段(以及 currentOp
命令和 db.currentOp()
shell 方法)包含有关重新分片协调器以及捐赠者和接收者分片正在进行的重新分片操作状态的附加信息。
db.currentOp
方法现在使用聚合阶段(在 mongosh
从 MongoDB 5开始。 0 ,即$currentOp
聚合阶段,在使用 mongosh
运行辅助方法db.currentOp()
时使用
mongos
/ mongod
连接池
从 MongoDB 5开始。 0 ,MongoDB 添加参数选项"automatic"
作为ShardingTaskExecutorPoolReplicaSetMatching
的新默认值。为mongos
设置时,实例遵循为"matchPrimaryNode"
选项指定的行为。为mongod
设置时,实例遵循为"disabled"
选项指定的行为。
renameCollection
与分片集合兼容
从 MongoDB 5.0 开始,可以使用 renameCollection
命令来更改分片集合的名称。
重命名分片集群中的分片集合或非分片集合时,源集合和目标集合都以独占方式锁定在每个分片上。对源集合和目标集合的后续操作必须等待重命名操作完成。
movePrimary
操作期间写入的错误消息
从 MongoDB 5.0 开始,使用 movePrimary
命令从分片集群中删除分片时,写入原始分片会生成错误消息。
拆分和合并数据段变更日志显示所属分片
从 MongoDB5 0config.changelog
owningShard
开始。 ,用于 分割 和 合并 操作的 集合中的文档包含 字段。owningShard
shardId
字段显示拥有已拆分或合并数据段的分片的 。
owningShard
字段有助于识别频繁发生拆分或合并操作的分片。
maxCatchUpPercentageBeforeBlockingWrites
服务器参数
从 MongoDB 5开始。 0 ,您可以设置maxCatchUpPercentageBeforeBlockingWrites
,以指定在moveChunk
操作期间尚未迁移的数据与正在传输的数据块总大小(以 MB 为单位)相比的最大允许百分比。
该参数可能会影响以下对象的行为:
moveChunk
手动运行的命令。负载均衡器功能,可自动运行多个
moveChunk
命令,使数据段在分片上均匀分配。请参阅分片集群负载均衡器。
Shell 变更
全新 MongoDB Shell: mongosh
MongoDB v 5中已弃用mongo
Shell。 0 。替换 shell 是mongosh
。旧版mongo
shell 将在未来版本中删除。
MongoDB v 5中的 Shell 打包也发生了变化。 0 。有关详细信息,请参阅安装说明。
Shell 支持 GCP 和 Azure KMS 提供商
从 MongoDB5 开始。0 、Google Cloud Platform KMS 和 Azure Key Vault 在mongosh
和旧版mongo
Shell 中均受支持,可作为 客户端字段级加密的 密钥管理服务 (KMS) 提供程序。
使用 KMS,您可以集中、安全地存储客户主密钥 (CMK),这些密钥用于加密和解密数据加密密钥,作为客户端字段级加密工作流的一部分。
此外,配置的 KMS 允许在与 MongoDB Enterprise 一起使用时使用 CSFLE 如何解密数据字段的文档。
要了解更多信息,请参阅使用 mongosh 配置 KMS 提供商。
快照
对读关注的扩展支持 "snapshot"
从 MongoDB 5.0 开始,主节点和从节点上的多文档事务之外的某些读取操作支持读关注 "snapshot"
。请参阅执行长期运行的快照查询。
minSnapshotHistoryWindowInSeconds
服务器参数
从 MongoDB 5.0 开始,可以使用 minSnapshotHistoryWindowInSeconds
参数来控制 WiredTiger 保留快照历史记录的时长。
事务
coordinateCommitReturnImmediatelyAfterPersistingDecision
范围
服务器参数 coordinateCommitReturnImmediatelyAfterPersistingDecision
可控制何时将事务提交决策返回给客户端。
该参数是在 MongDB 5.0 中引入的,默认值为true
。 在 MongoDB 6.0 和 5.0.10 中,该默认值更改为false
。
当 coordinateCommitReturnImmediatelyAfterPersistingDecision
为 false
时,分片事务协调器会等待所有成员确认多文档事务提交,然后再将提交决策返回给客户端。
变更命名
从 2022 年 2 月开始,“版本化 API”术语更改为“Stable API”。此次命名更改后,所有概念和功能均保持不变。
一般性变更
具有$lookup
管道阶段的查询的执行计划统计信息
改进了字段名称中 ( $
) 和 ( .
) 的处理
MongoDB 5.0 改进了对以 ($
) 为前缀或包含 (.
) 字符的字段名称的支持。存储数据的验证规则已更新,以便更轻松地处理使用这些字符的数据源。
集群范围的默认写关注
从 MongoDB 5.0 开始,通过 setDefaultRWConcern
命令设置集群范围的写关注 (CWWC) 后,就无法取消设置。
隐式默认写关注
从 MongoDB 5.0 开始,隐式默认写关注为 w: majority
。但是,对于包含仲裁节点的部署,需要特别考虑以下事项:
副本集的投票多数是 1 加投票成员数量的一半,四舍五入。如果数据承载投票成员的数量不超过投票多数,则默认写关注为
{ w: 1 }
。在所有其他场景中,默认写关注为
{ w: "majority" }
。
具体来说,MongoDB 使用以下公式来确定默认写关注:
if [ (#arbiters > 0) AND (#non-arbiters <= majority(#voting-nodes)) ] defaultWriteConcern = { w: 1 } else defaultWriteConcern = { w: "majority" }
例如,考虑以下部署以及各自的默认写关注:
非仲裁节点 | 仲裁节点 | 投票节点 | 多数投票节点 | 隐式默认写关注 |
---|---|---|---|---|
2 | 1 | 3 | 2 | { w: 1 } |
4 | 1 | 5 | 3 | { w: "majority" } |
在第一个示例中:
有 2 个非仲裁节点和 1 个仲裁节点,共有 3 个投票节点。
多数投票节点(1 加 3 的一半,四舍五入)为 2。
非仲裁节点的数量 (2) 等于多数投票节点 (2),导致隐式写关注为
{ w: 1 }
。
在第二个示例中:
共有 5 个投票节点,其中有 4 个非仲裁节点和 1 个仲裁节点。
多数投票节点(1 加 5 的一半,四舍五入)为 3。
非仲裁节点的数量 (4) 大于多数投票节点 (3),导致隐式写关注为
{ w: "majority" }
。
如果发生选举或副本集成员不可用,{ w: "majority" }
默认写关注可提供更强的持久性保证。
mongosShutdownTimeoutMillisForSignaledShutdown
范围
从 MongoDB 5.0 开始,新参数 mongosShutdownTimeoutMillisForSignaledShutdown
指定在启动 mongos
关闭之前等待任何正在进行的数据库操作完成的时间(以毫秒为单位)
可配置zstd
压缩级别
MongoDB 5.0 引入了 zstdCompressionLevel
配置文件选项,当 blockCompressor
设置为 zstd
时,该选项允许配置压缩级别。
无锁读取操作
从 MongoDB 5.0 开始,当另一个操作在集合上持有独占 (X) 写锁时,以下读取操作不会受到阻止:
写入集合时,mapReduce
和 aggregate
持有意向排他 (IX) 锁。因此如果集合上已经持有排他 X 锁,mapReduce
和 aggregate
写操作将被阻塞。
解释了模式验证失败
MongoDB 5.0 增加了对文档模式验证失败的详细解释。
validate
命令中的修复选项
从 MongoDB 5.0 开始,validate
命令和 db.collection.validate()
辅助方法新增了一个修复选项,用于修复存在不一致的集合。
validate
命令和 db.collection.validate()
辅助方法还会返回一个新的 repaired
布尔值,如果该集合已修复,则该值为 true
。
validate
命令报告文档模式违规
从 MongoDB 5.0 开始,validate
和 db.collection.validate()
会验证集合中的文档。如果违反了任何模式验证规则,这些命令都会报告。
中的修复选项 mongod
从 MongoDB 5.0 开始,mongod
的 --repair
选项会验证集合,以发现任何不一致之处,并在可能的情况下对其进行修复,从而避免重建索引。有关用法和限制,请参阅 --repair
选项。
corruptRecords
验证输出中的字段
从 MongoDB 5.0 开始,validate
命令和 db.collection.validate()
辅助方法返回一个新的 corruptRecords
字段,其中包含损坏文档的 RecordId
值数组。
maxValidateMemoryUsageMB
服务器参数
从 MongoDB 5开始。 0 , setParameter
命令新增maxValidateMemoryUsageMB
参数,用于设置validate
命令的最大内存使用量。
findChunksOnConfigTimeoutMS
服务器参数
从 MongoDB 5.0 开始,可以使用 findChunksOnConfigTimeoutMS
参数来更改 chunks
上查找操作的超时时间。
数据库分析器filter
选项
从 MongoDB 5.0 开始,您可以为数据库分析器设置 filter
选项,用于确定要分析和记录哪些操作。您可以使用 filter
表达式代替 slowms
和 sampleRate
分析器选项。
请参阅:
记录数据库分析器的设置变更
log file
从 MongoDB 开始。 中,使用profile
命令或db.setProfilingLevel()
包装器方法对 50数据库分析器level
slowms
、sampleRate
、 或 所做的更改会记录在 中。filter
服务器日志和审核日志的独立日志轮换
从 MongoDB 5.0 开始,启用审核后,现在可以使用 logRotate
命令独立轮换服务器日志和审核日志。在此之前,logRotate
会将两种日志一起轮换。
remote
慢操作日志中的字段
从 MongoDB 5.0 开始,慢速操作日志消息包含指定客户端 IP 地址的 remote
字段。
remoteOpWaitMillis
日志字段
从 MongoDB 5.0 开始,可以使用 remoteOpWaitMillis 日志字段获取分片结果的等待时间。
resolvedViews
针对视图的慢查询的日志字段
从 MongoDB 5.0 开始,针对视图的慢查询的日志消息包括一个包含该视图详细信息的 resolvedViews
字段。
使用let
选项定义变量
从 MongoDB 5.0 开始,以下命令包含 let
选项,用于定义变量列表。这样可以将变量与查询文本分开,从而提高命令的可读性。
find
命令findAndModify
命令和相应的db.collection.findAndModify()
shell 助手update
命令和相应的db.collection.update()
shell 助手delete
命令db.collection.remove()
shell 助手
update
命令还有一个用于定义变量列表的 c
字段。
默认支持用户名到 LDAP DN 的映射
从 MongoDB 5.0 开始,userToDNMapping
配置文件选项以及 mongod
/mongos
和 mongoldap
的 --ldapUserToDNMapping
命令行选项现在默认将经过身份验证的用户名映射为 LDAP DN,前提是为该选项指定了一个空映射文档(即空字符串或空数组)。在此之前,提供空映射文档会导致映射失败。
其他dbStats
可用空间统计信息
从 MongoDB 5.0 开始,dbStats
命令会输出以下新增的统计信息:
分配给集合的可用空间 (
freeStorageSize
)分配给索引的可用空间 (
indexFreeStorageSize
)分配给集合和索引的总可用空间 (
totalFreeStorageSize
)
serverStatus
输出变化
serverStatus
在其输出中包含以下新字段:
- 聚合指标
- API 版本指标
- 复制指标
- 读关注计数器
readConcernCounters
,报告查询操作指定的读关注级别(readConcernCounters
取代opReadConcernCounters
)readConcernCounters
现已新增以下字段:readConcernCounters.nonTransactionOps.noneInfo
readConcernCounters.transactionOps.noneInfo
- 写关注计数器
opWriteConcernCounters
现已新增以下字段:opWriteConcernCounters.insert.noneInfo
opWriteConcernCounters.update.noneInfo
opWriteConcernCounters.delete.noneInfo
- 线程连接数量
connections.threaded
,报告来自客户端的传入连接数,这些连接被分配给为客户端请求提供服务的线程
- 重新分片统计信息
shardingStatistics.resharding
,报告有关重新分片操作的统计信息
- 服务执行器指标
network.serviceExecutors
,报告为客户端请求运行操作的服务执行器
- 游标指标
metrics.cursor.moreThanOneBatch
,报告返回多个批处理的游标总数(使用getMore
命令检索其他批处理)metrics.cursor.totalOpened
,报告已打开的游标总数
- 安全计数器
- Repl
repl
现在包含一个primaryOnlyServices
文档,其中包含有关仅在副本集主节点上运行的服务的更多信息。
计划缓存调试信息大小限制
从 MongoDB 5开始。 0 ,仅当所有collection的plan caches
累积大小低于0时,缓存才会保存完整的plan cache
条目。 5 GB。当所有collection的plan caches
累积大小超过此阈值时,会存储额外的plan cache
条目,但不会包含某些调试信息。
plan cache
条目的估计大小(以字节为单位)可在 $planCacheStats
的输出中找到。
关闭会话中打开的非活动游标
从 MongoDB5 开始。0 ,如果相应的 服务器会话 killSessions
以 命令结束、会话超时或者客户端已耗尽游标,则在客户 端会话 中创建的游标将关闭。请参阅 在 mongosh
中迭代游标。
新的validateDBMetadata
命令
MongoDB 5.0 新增了 validateDBMetadata
命令。validateDBMetadata
命令会检查数据库或集合的存储元数据在特定 API 版本中是否有效。
性能考虑因素
隐式默认写关注
MongoDB 5.0 将默认写关注更改为 { w: "majority" }
。新的默认写入关注可能会影响性能,因为只有在计算的大多数副本集成员已执行写入并将写入持久保存到磁盘后,MongoDB 才会确认写入。
如果应用程序依赖于性能敏感的写入,您可以覆盖默认写关注,但这样会牺牲数据持久性保证。要覆盖此设置,您可以:
在单个操作级别为性能关键型写入设置写关注。有关更多信息,请参阅驱动程序文档。
使用
setDefaultRWConcern
命令显式设置默认写关注。
警告
如果写入操作使用{ w: 1 }
写关注(write concern),并且主节点在写入操作完成之前重新启动,则回滚目录可能会排除在oplog hole之后提交的写入。
local
默认读关注
从 MongoDB 5.0 开始,"local"
是针对主节点和从节点的读取操作的默认读关注(read concern)级别。
对于使用过滤器的计数查询以及覆盖查询来说,这可能会导致显著的延迟增长。
您可以通过使用 setDefaultRWConcern
设置集群范围的读关注(read concern)来更改此默认行为。
快照历史记录保留
MongoDB 5.0 将 minSnapshotHistoryWindowInSeconds
的默认值提高到 300
,这可能会对性能产生负面影响。如果您不使用读关注 "snapshot"
,可以在所有 mongod
实例上将 minSnapshotHistoryWindowInSeconds
参数的值减少到 5
。有关详细信息,请参阅快照历史记录保留。
注意
如果你正在运行一个分片集群,请勿在配置服务器上更改 minSnapshotHistoryWindowInSeconds
。
平台支持
最低微架构
MongoDB 5.0 引入了以下最低微架构要求:
CPU | 支持的最低微架构 |
---|---|
Intel x86_64 | MongoDB 5.0 需要具备以下条件之一:
|
AMD x86_64 | MongoDB 5.0 需要 AMD Bulldozer 或更高版本。 |
ARM arm64 | MongoDB 5.0 需要 ARMv8.2-A 或更高版本。 |
MongoDB v5.0 不支持不符合这些最低微架构要求的 x86_64
或 arm64
平台。
更多信息,请参阅 x86_64 平台支持。
已删除的平台
MongoDB 5.0 删除了对以下平台的支持:
如需 MongoDB 5.0 支持的平台和架构的完整列表,请参阅平台支持。
影响兼容性的变更
有些更改会影响兼容性,可能需要用户执行操作。如需兼容性变更的详细列表,请参阅 MongoDB 5.0 中的兼容性变更。
升级程序
重要
特征兼容性版本
要从 4.4 部署升级到 MongoDB 5.0,4.4 部署必须将 featureCompatibilityVersion
设置为 4.4
。要检查版本:
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
要升级到 MongoDB 5.0,请参阅针对您的 MongoDB 部署的升级说明:
如果您需要有关升级到5的指导。 0 , MongoDB 专业服务提供主要版本升级支持,帮助确保 MongoDB 应用程序平稳过渡而不中断。
降级考虑因素
MongoDB 仅支持单版本降级。您无法降级到比当前版本落后多个版本的版本。
例如,您可以将 5.0 系列部署降级为 4.4 系列部署。但是,不支持将 4.4 系列部署进一步降级为 4.2 系列部署。
立即下载
要下载 MongoDB 5 。 0 ,转到MongoDB 下载中心。
提示
另请参阅:
已知问题
版本中 | 问题 | 状态 |
---|---|---|
5.0.0 | SERVER-58171 :时间序列集合的 granularity 参数在创建集合后无法修改。 | 已在 5.0.1 中修复 |
5.0.0 | SERVER-58392 :正在进行的重新分片操作可能会阻止备份或恢复操作成功。 | 未解决 |
报告问题
要报告问题,请参阅 MongoDB GitHub 存储库 有关如何为 MongoDB 服务器或相关项目之一提交 JIRA 票证的说明。