Docs 菜单
Docs 主页
/
MongoDB Manual
/

MongoDB 4.4 发布说明

在此页面上

  • 补丁版本
  • 全时诊断数据捕获要求
  • 聚合(Aggregation)
  • 副本集
  • 分片集群
  • 投射
  • 事务
  • 排序
  • 安全改进
  • 结构化日志
  • 平台支持
  • Mongo Shell
  • 工具
  • 驱动程序
  • 索引
  • 已删除的命令
  • 网络
  • 总体改进
  • 影响兼容性的变更
  • 升级程序
  • 降级考虑因素
  • 立即下载
  • 已知问题
  • 报告问题

警告

过去的版本限制

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

问题
受影响的版本
WT- 7426
4.4.5
4.4.8
4.4.2 - 4.4.8
4.4.0 - 4.4.18 (ARM64 或 POWER 系统架构)
4.4.8 - 4.4.21 (Ops Manager 或 Cloud Manager 集群上的增量备份)
4.4.7

重要

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

由于 CVE-2024-1351,在 4.4.29 之前的 MongoDB 4.4 中, 在 --tlsCAFileCAFile的某些配置下,MongoDB 服务器可能会跳过对等互连验证,这可能会导致不可信连接成功。

这可能会有效降低 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 :证书验证不正确

修复的问题:

修复的问题:

修复的问题:

修复的问题:

修复的问题:

修复的问题:

修复的问题:

修复的问题:

修复的问题:

修复的问题:

修复的问题:

修复的问题:

修复的问题:

修复的问题:

修复的问题:

修复的问题:

修复的问题:

修复的问题:

修复的问题:

修复的问题:

修复的问题:

修复的问题:

修复的问题:

修复的问题:

从版本4 4mongodmongos开始。 ,如果mongod mongosdiagnostic.datastorage.dbPathmongod或 中的 全时诊断数据捕获 (FTDC) 线程失败,则会终止原始进程。为了避免出现最常见的故障,请确认运行systemLog.path / 用户有权在 (针对 )或与 (针对mongos )。

MongoDB 4 。 4添加了$unionWith聚合阶段,从而能够将多个集合的管道结果合并到单个结果集中。

有关详细信息,请参阅$unionWith

从版本4开始。 4 ,MongoDB 提供以下新操作符,允许用户定义自定义聚合表达式:

通过添加这些新操作符,您可以使用聚合来编写自定义 JavaScript 表达式,而不是依赖mapReduce$where

注意

即使在4版本之前。 4时,还可以使用其他聚合管道阶段(例如$group$merge等)重写各种 map-reduce 表达式,而无需使用自定义函数。

有关更多信息,请参阅Map-Reduce 到聚合管道。

Operator
说明
返回用户定义的累加器操作符的结果。
返回给定字符串或二进制数据值内容的大小(以字节为单位)。
以字节为单位返回给定文档(即 bsontype Object) 的大小(当编码为 BSON 时)。
定义自定义聚合表达式。

如果指定表达式解析为 integerdecimaldoublelong,则返回布尔值 true

如果表达式解析为任何其他BSON 类型null或缺失字段,则返回布尔值false

替换给定输入中匹配字符串的第一个实例。
替换给定输入中匹配字符串的所有实例。

从 MongoDB 4.4 开始:

  • $out可以输出到不同数据库中的集合。在早期版本中, $out只能输出到运行聚合的同一数据库中的集合。

  • $out仅当集群中所有节点都将 featureCompatibilityVersion 设置为4.4 或更高且“ 读取偏好” 允许从节点读取时, 才能在副本集从节点上运行。检查 驱动程序 文档,了解驱动程序何时添加了支持。

从 MongoDB 4开始。 4 (也可以从4 . 2 . 4开始), $indexStats在其输出中包含以下字段:

字段
说明
分片的名称(如果适用)。
索引规范文档
布尔标志,指示当前是否正在构建索引。

从 MongoDB 4.4 开始:

  • $merge可以输出到不同数据库中的集合。在早期版本中, $merge只能输出到运行聚合的同一数据库中的集合。

  • $merge仅当集群中所有节点都将 featureCompatibilityVersion 设置为4.4 或更高且“ 读取偏好” 允许从节点读取时, 才能在副本集从节点上运行。检查 驱动程序 文档,了解驱动程序何时添加了支持。

$merge可以输出到正在聚合的同一collection。您还可以输出到管道其他阶段中出现的collection,例如$lookup

警告

$merge 输出到正在聚合的同一集合时,文档可能会被多次更新,或者操作可能会导致无限循环。当$merge 执行的更新更改了磁盘上存储的文档的物理位置时,就会出现此行为。当文档的物理位置发生变化时,$merge 可能会将其视为全新文档,从而进行更多更新。有关此行为的更多信息,请参阅 万圣节问题。

从版本4开始。 4 、

从 MongoDB 4开始。 4 、 $collStats接受queryExecStats字段作为参数文档。提供此字段会在输出中返回以下字段:

collectionScans字段包含一个包含以下字段的嵌入式文档:

字段名称
说明
total
一个 64 位整数,表示执行collection扫描的查询总数。总数包括使用和未使用可追加游标的查询。
nonTailable
一个 64 位整数,给出执行未使用可追加游标的集合扫描的查询数量。

从 MongoDB4 4开始。 ,当您在db.collection.explain().aggregate() executionStats和 模式下运行allPlansExecution 方法时, 解释输出 中列出的每个 管道阶段 都包括nReturnedexecutionTimeMillisEstimate

从 MongoDB 4.4 开始,如果被暂时(即临时)网络错误、集合删除或集合重命名中断,从节点执行初始同步以尝试恢复同步进程。同步源还必须运行 MongoDB 4.4 以支持可恢复初始同步。如果同步源运行 MongoDB 4.2 或更早版本,从节点就像遇到非暂时性网络错误一样必须重启初始同步进程。

默认情况下,从节点会尝试在 24 小时内恢复初始同步。MongoDB 4.4 增加了 initialSyncTransientErrorRetryPeriodSeconds 服务器参数,用于控制从节点尝试恢复初始同步的时间长度。如果从节点无法在配置的时间段内成功恢复初始同步进程,则会从副本集中选择一个新的健康源,然后从头开始重新启动初始同步进程。

MongoDB 4之前的版本。 4 ,如果从节点在此过程中遇到错误,则会重新启动整个初始同步。

从 MongoDB 4.4 开始,源同步会向其同步从节点发送连续的oplog条目流。

在 MongoDB 4.4 之前,从节点通过 从源向其同步 发出请求并等待响应来获取批量的 oplog 条目。这需要为每批 oplog 条目进行一次网络往返。 MongoDB 4.4 添加了oplogFetcherUsesExhaust 启动参数,用于禁用流复制并使用较早的复制行为。

有关详细信息,请参阅流复制。

从 Mongo 4开始。 4 ,集合的回滚目录以集合的 UUID 命名,而不是集合命名空间;例如

<dbpath>/rollback/20f74796-d5ea-42f5-8c95-f79b39bad190/removed.2020-02-19T04-57-11.0.bson

有关详细信息,请参阅回滚数据。

您可以指定保留 oplog 条目的最小小时数,其中mongod满足以下两个条件时才会删除 oplog 条目:

  • oplog 已达到最大配置大小

  • oplog 条目早于根据主机系统时钟配置的小时数。

默认情况下,MongoDB 不设置最小 oplog 保留期,并自动从最旧的条目开始截断 oplog,以维持配置的 oplog 最大大小。

要在启动 mongod 时配置 oplog 最短保留期,请执行以下任一操作:

要在正在运行的 mongod 上配置最短 oplog 保留期,请使用 replSetResizeOplog。在 mongod 运行时设置最短 oplog 保留期会覆盖启动时设置的任何值。您必须更新相应配置文件设置或命令行选项的值,才能在服务器重启后继续保持这些更改。

重要

oplog 的大小可以不受限制地增长,以便在配置的小时数内保留 oplog 条目。由于写入量高且保留期长,这可能会导致系统磁盘空间减少或耗尽。

提示

另请参阅:

从 MongoDB 4开始。 4 ,副本集从节点上的慢速 oplog 应用程序日志受slowOpSampleRate的影响。在以前的版本中,无论采样率如何,MongoDB 都会记录所有慢速 oplog 条目。

slowOpSampleRate 指定应分析或记录的慢速操作的比例。

注意

需要 featureCompatibilityVersion 4.4+

副本集或分片集群中的每个 mongod 必须featureCompatibilityVersion 设置为至少 4.4,才能跨副本集节点同时启动索引构建。

索引构建在副本集或分片集群上,并在所有数据承载副本集成员上同时构建。对于分片集群,索引构建仅会在包含当前被索引集合的数据的分片上进行。主节点需要最少数量的数据承载 voting 节点(即提交法定节点数),包括其自身,这些节点必须在将索引标记为可供使用之前完成构建。

默认情况下,索引构建使用所有承载数据的投票节点的提交法定人数。要使用非默认提交法定人数启动索引构建,MongoDB 4 。 4将commitQuorum参数添加到createIndexes或其 shell 助手db.collection.createIndex()db.collection.createIndexes()中。

要修改正在进行的索引构建所需的法定人数,请使用 MongoDB 4 。 4引入了新的setIndexCommitQuorum命令。

有关详细信息,请参阅复制环境中的索引构建

从 MongoDB4 4开始。 ,replSetReconfig 命令会等到大多数投票成员安装副本配置,然后再返回成功。投票成员是 为 的 members[n].votes任何1 副本成员,包括仲裁节点。首先,该操作会等到提交 当前 配置,然后再在主节点上安装 配置。然后,该操作会等到大多数投票成员安装 新 配置,然后再成功返回。有关更多信息,请参阅 重新配置等到大多数成员安装副本集配置

replSetReconfig默认情况下, 会无限期等待大多数投票成员安装配置。 MongoDB4 。4 还为 添加了可选的 maxTimeMS replSetReconfig参数,用于指定等待操作成功返回的最长时间。

从 MongoDB 4开始。 4 , replSetReconfig命令允许一次添加或删除不超过1 voting成员。要添加或删除多个投票成员,请发出一系列replSetReconfigrs.reconfig()操作,一次添加或删除一个成员。有关更多信息,请参阅重新配置只能添加或删除不超过一个投票节点

在主节点上运行时, replSetGetConfig命令可以指定新选项CommitmentStatus: true 。使用该选项运行时,该命令会在输出中包含commitmentStatus字段。此输出字段指示副本集之前的重新配置是否已提交,以便副本集准备好再次重新配置。有关更多信息,请参阅replSetGetConfig命令。

MongoDB 4 。 4将term字段添加到副本集配置文档中。副本集节点使用termversion就“最新”副本配置达成共识。设置featureCompatibilityVersion (fCV) : " 4 . 4 "会隐式执行replSetReconfig ,以将term字段添加到配置文档中,并且会阻塞,直到新配置传播到大多数副本集成员。同样,降级到fCV : "4.2"会隐式执行重新配置以删除term字段。

从 MongoDB 4开始。 4 ,您可以使用initialSyncSourceReadPreference参数指定首选初始同步源。您只能在mongod启动时使用setParameter配置文件设置或--setParameter命令行选项来设置此参数。

initialSyncSourceReadPreference 支持以下读取偏好模式:

如果副本集已禁用chaining ,则默认的initialSyncSourceReadPreference读取偏好模式为primary

您不能为 指定标签集或maxStalenessSeconds initialSyncSourceReadPreference

提示

另请参阅:

从版本 4.4 开始,MongoDB 使用最近访问的数据提供镜像读,以预热可选举从节点的缓存。通过镜像读,主节点可以镜像其接收的一部分操作,并将其发送到可选举从节点的子集。预热从节点的缓存有助于在选举后更快地恢复性能。

注意

主节点对客户端的响应不受镜像读取的影响。镜像读是主节点执行的“即发即弃”操作;即,主节点不等待镜像读的响应。

MongoDB 4 。 4添加了以下镜像读参数。您可以使用setParameter配置文件设置或--setParameter命令行选项在启动时设置参数,也可以使用setParameter命令在运行时设置参数:

范围
说明

指定镜像读的samplingRatemaxTimeMS设置。

{ samplingRate: <float>, maxTimeMS: <int> }

0samplingRate会关闭镜像读。

如果在操作中指定包含该字段,则命令serverStatus及其相应的mongo Shell 方法db.serverStatus()将返回mirroredReads

db.runCommand( { serverStatus: 1, mirroredReads: 1 } )

db.serverStatus( { mirroredReads: 1 } )

从4开始。 4 ,MongoDB 提供refineCollectionShardKey命令。使用新命令,您可以通过向现有键添加一个或多个后缀字段来优化集合的分片键。细化集合的分片键可以实现更细粒度的数据分布,并且可以解决现有键由于关联基数不足而导致巨型(即不可分割)数据段的情况。

例如,您可能有一个带有分片键{ customer_id: 1 }的现有orders集合。您可以通过在分片键中添加后缀order_id字段来更改分片键,以便{ customer_id: 1, order_id: 1 }成为新的分片键,从而允许按customer_idorder_id字段分发数据。

要使用refineCollectionShardKey命令,分片集群的特征兼容性版本 (fcv)必须为4.4 。有关更多信息,请参阅refineCollectionShardKey命令。

注意

优化分片键后,可能并非集合中的所有文档都具有后缀字段。要填充缺失的分片键字段,请参阅缺失的分片键字段。

在优化分片键之前,如果可能,请确保集合中的所有或大多数文档都具有后缀字段,以避免事后必须填充该字段。

在早期版本中,一旦选择了分片键,就无法修改该键。

重要

缺少分片键

由于能够使用后缀优化分片键,因此可能并非集合中的所有文档都具有后缀字段。从版本4开始。 4 ,分片集合中的文档可能缺少分片键字段。在早期版本中,分片集合的每个文档中必须存在分片键字段。有关详细信息,请参阅缺少分片键字段。

为了最大限度地减少延迟,默认情况下,mongos 实例可以使用 对冲读 。通过对冲读,mongos 实例可以将读取操作路由到每个查询分片的多个成员,并从每个分片的第一个响应者返回结果。默认情况下,mongos 实例支持使用对冲读。要关闭mongos 实例对冲读的支持,请为readHedgingMode 设置mongos 参数。

对冲读是针对每个操作指定的,作为读取偏好的一部分。非primary读取偏好支持对冲读。读取偏好nearest默认指定对冲读。

有关更多信息,请参阅:

范围
说明
启用或禁用mongos实例对对冲读的支持。

要为读取偏好指定对冲读,MongoDB 4 。 4引入了对冲读选项。要设置为使用 MongoDB 驱动程序,请参阅驱动程序读取偏好 API 文档。

以下mongo Shell 方法可以接受对冲选项,以为指定的读取偏好启用对冲读:

命令serverStatus及其相应的mongo Shell 方法db.serverStatus()返回hedgingMetrics

MongoDB 4 。 4提供命令balancerCollectionStatusmongo Shell 助手方法sh.balancerCollectionStatus() ,该方法返回有关在命令运行时分片集合的数据段是否平衡(即不需要移动)的信息或需要移动。使用该命令,用户可以验证初始数据段创建和迁移是否已完成。

从 MongoDB 4开始。 4 、 mongos添加了以下新的默认启动行为:

  • mongos 在启动时预加载分片集群的路由表,而不是在第一个传入客户端连接时按需预加载。

  • mongos 在启动时预热其连接池以对分片主机进行预热,而不是按需对传入的客户端连接进行预热。

此行为可在启动或重新启动mongos实例后加快为初始客户端连接提供服务的速度。特别是,这允许使用多个mongos实例的站点根据需要重新启动这些实例或添加新实例,而不需要向这些实例发送初始客户端请求,因为这些实例需要等待连接建立。

默认情况下,路由表预加载和连接池预热均处于启用状态。

MongoDB 4 。 4添加了以下参数来控制此行为:

flushRouterConfig执行movePrimarydropDatabase 命令后,不再需要运行 。现在,这两个命令会在运行时根据需要自动刷新分片集群的路由表。在flushRouterConfig flushRouterConfig 注意事项 中描述的情况下,仍然建议手动发出 命令。

从 MongoDB 4开始。 4 ,您可以使用带有单个哈希字段的复合分片键对集合进行分片。在4之前。 4 ,MongoDB 不支持带有哈希字段的复合分片键。

复合哈希分片支持区域分片等功能,其中前缀(即第一个)非哈希字段支持区域范围,而哈希字段支持更均匀的分片数据分布。例如,以下操作根据支持分区分片的复合哈希分片键对集合进行分片:

sh.shardCollection(
"examples.compoundHashedCollection",
{ "fieldA" : 1, "fieldB" : 1, "fieldC" : "hashed" }
)

复合哈希分片还支持带有哈希前缀的分片键,用于解决与单调递增字段相关的数据分布问题。例如,以下操作在复合哈希分片键上对集合进行分片,其中哈希字段是分片键前缀:

sh.shardCollection(
"examples.compoundHashedCollection",
{ "_id" : "hashed", "fieldA" : 1}
)

提示

从 MongoDB 4开始。 4 ,以下更改提高了故障转移期间的数据段迁移和孤立文档清理的弹性:

  • 数据段迁移后等待清理的数据段范围现在会持久保留在config.rangeDeletions集合中,并在整个分片中复制。如果发生故障转移,分片的新主节点将读取config.rangeDeletions集合中的文档并继续删除相应的范围。删除范围后,描述等待清理的范围的文档也会从config.rangeDeletions集合中删除。

  • cleanupOrphaned命令不再从分片中删除孤立文档。相反, cleanupOrphaned会等待从分片中删除计划删除的孤立文档。

在分片的主节点上将disableResumableRangeDeleter参数设置为true ,以暂停分片上的范围删除。

从 MongoDB 4开始。默认情况下,配置服务器主节点4检查分片集合的分片之间的索引不一致情况。在配置服务器主节点上运行时,命令serverStatus返回字段shardedIndexConsistency以报告索引不一致情况。

为了配置索引一致性检查,MongoDB 提供了以下参数:

范围
说明
启用或禁用索引一致性检查。
配置服务器的主节点检查分片集合的索引一致性的时间间隔。

从 MongoDB 4开始。 4 ,可以有多个正在进行的removeShard操作。

在早期版本中,如果正在进行另一个 操作,则removeShard removeShard会返回错误。

从版本4开始。 4 ,MongoDB 删除了对分片键大小的512字节限制。对于 MongoDB 4 。 2及更早版本中,分片键不能超过512个字节。

从4开始。 4 ,如果find或后续getMore命令由于查询的分片不可用而返回部分结果,则输出包含布尔标志partialResultsReturned

对于太大而无法迁移的数据段,从 MongoDB 4开始。 4 :

  • 新的负载均衡器设置attemptToBalanceJumboChunks允许负载均衡器迁移太大而无法移动的数据段,只要这些数据段未标记为jumbo 。有关详细信息,请参阅超过大小限制的负载均衡范围

  • moveChunk命令可以指定新选项forceJumbo ,以允许迁移太大而无法移动的数据段。这些数据段可能会也可能不会标记为jumbo。

从4开始。 4 ,如果存在过时的数据段,则仅当路由器访问以前具有或当前具有该数据段的分片时,才会刷新目录缓存。

在 MongoDB 4.4 之前,任何过时的数据段都会导致集合的整个数据段分布被标记为过时,并强制所有联系分片的路由器刷新其分片目录缓存。 MongoDB 4.4 添加了enableFinerGrainedCatalogCacheRefresh启动参数,用于仅对目标分片禁用目录缓存刷新并使用较早的目录缓存刷新行为。 enableFinerGrainedCatalogCacheRefresh参数默认为true

从版本4开始。 4 (以及4 . 2 . 7 )时,MongoDB 会自动将system.sessions集合分割为至少1024数据段,并将这些数据段均匀地分布在集群中的各个分片上。

从 MongoDB 4.4 开始,作为使find()findAndModify()投影与聚合的$project阶段保持一致的一部分,

  • find()findAndModify()投影可以接受聚合表达式和聚合语法,包括使用文字和聚合变量。通过使用聚合表达式和语法,您可以投影新字段或使用新值投影现有字段。

  • find()findAndModify()投影可以使用嵌套形式指定嵌入式字段;例如{ field: { nestedfield: 1 } }以及点表示法。在早期版本中,只能使用点表示法。

有关更多信息,请参阅:

提示

另请参阅:

从 MongoDB 4开始。 4 , $meta操作符添加了对检索indexKey元数据的支持。 indexKey元数据仅用于调试目的,不适用于应用程序逻辑。有关更多信息,请参阅$meta

从版本4开始。 4 ,与 db.collection.find() 一起使用时,MongoDB 会进行以下{ $meta: "textScore" }更改

  • 您必须在查询谓词中指定$text操作符才能使用{ $meta: "textScore" }

  • 您可以按搜索相关性(即{ $meta: "textScore" } )对结果文档进行排序,而无需同时投影textScore

    在早期版本中,要在 sort() 中包含 { $meta: "textScore" } 表达式,还必须在投影中包含相同的表达式。

  • 如果在投影和排序中都包含{ $meta: "textScore" }表达式(即db.collection.find(<$text search>, <projection>).sort(<sort>) ,则投影和排序文档可以针对该表达式具有不同的字段名称。

    在 MongoDB 的早期版本中,如果在投影和排序中都包含{ $meta: "textScore" } ,则必须在这两个位置指定相同的字段名称。

有关详细信息,请参阅文本分数元数据$meta: "textScore" 。 有关"textScore"投影和排序的示例,请参阅文本搜索分数示例。

请参阅:文本搜索元数据 { $meta: "textScore" } 查询要求

从 MongoDB 4开始。 4具有功能兼容性版本 (fcv) "4.4" ,您可以在多文档事务中创建集合和索引,除非该事务是跨分片写事务。

在事务中创建集合时:

在事务中创建索引时:

  • 您可以在不存在的集合上创建索引。集合是作为操作的一部分创建的。

  • 您可以在先前在同一事务中创建的新空集合上创建索引。

  • 如果针对db.collection.createIndex() 系统集合 执行, 方法将失败。

有关更多详细信息,请参阅在事务中创建集合和索引。

MongoDB 4 。 4添加了一个新参数shouldMultiDocTxnCreateCollectionAndIndexes ,该参数可以启用(默认)或禁用事务内的集合和索引创建。为分片集群设置参数时,请在所有分片上设置该参数。

要在事务内显式创建集合或索引,事务读关注级别必须为 "local"。显式创建通过以下方式实现:

提示

另请参阅:

从 MongoDB 4开始。 4 , sort()方法现在使用与$sort聚合阶段相同的排序算法。进行此更改后,对包含重复值的字段执行sort()的查询更有可能导致这些值的排序顺序不一致。

对重复值使用sort()时,为保证排序一致性,请在排序中包含一个额外字段,其中仅包含唯一值。

通过在排序中添加_id字段,可以轻松完成此操作。

有关更多信息,请参阅排序一致性

MongoDB Enterprise 4 。 4提供了一个新的mongokerberos工具,用于验证平台的 Kerberos 配置是否与 MongoDB 一起使用,以及通过 Kerberos 测试端到端客户端身份验证。运行时, mongokerberos会返回一份报告,说明遇到的任何问题,并提供解决这些问题的潜在建议。 mongokerberos仅在 MongoDB Enterprise 中可用。

从版本4开始。 4 ,MongoDB 默认启用 OCSP(在线证书状态协议)来检查证书吊销情况。使用 OCSP 后,无需定期下载Certificate Revocation List (CRL)并使用更新的 CRL 重新启动mongod / mongos

在版本 4.0 和 4.2 中,只能通过在 Windows 或 macOS 上使用 system certificate store 来使用 OCSP。

提示

作为 OCSP 支持的一部分,MongoDB 4 . 4在 Linux 上支持以下内容:

  • OCSP 装订 。通过 OCSP 装订,mongodmongos 实例可在 TLS/SSL 握手期间向客户端提供这些证书时,将 OCSP 状态响应附加或“装订”到其证书中。通过将 OCSP 状态响应包含在证书中,OCSP 装订使客户端无需单独发出请求来检索所提供证书的 OCSP 状态。

  • OCSP 必备装订扩展 。 OCSP 必须装订是一个可以添加到服务器证书中的扩展,它告诉客户端在 TLS/SSL 握手期间接收证书时需要 OCSP 装订。

MongoDB 4 。 4添加了以下 OCSP 参数。您可以使用setParameter配置文件设置或--setParameter命令行选项在启动时设置这些参数:

范围
说明
启用或禁用 OCSP 支持。
指定在刷新装订的 OCSP 状态响应之前等待的秒数。
指定 mongod / mongos 实例在接收其证书的 OCSP 状态响应时应等待的最大秒数。
指定 mongod / mongos 在客户端证书验证时应等待 OCSP 响应的最大秒数。

从 MongoDB 4开始。如果提供的 x,则4 、 mongod / mongos会记录连接警告。 509证书将在mongod/mongos系统时钟后的30天内过期。具体来说,与mongodmongos的以下连接可以触发 x。 509证书过期警告:

警告日志消息类似于以下内容:

<Timestamp> W NETWORK [connection] Peer certificate <Certificate Subject Name> expires...

考虑主动续订客户端 x。 509证书即将过期,以确保与集群的持续连接。

MongoDB 4 。 4添加了tlsX509ExpirationWarningThresholdDays参数,用于控制证书过期警告阈值。将该参数设置为0以禁用警告。有关完整文档,请参阅tlsX509ExpirationWarningThresholdDays

在 CentOS 8和 RHEL 8上,MongoDB 4 。 4 (以及版本4 . 2 、 4 . 0和3 . 6 )支持 TLS 1 。 3 。

如果由于 LDAP 服务器网络或身份验证失败而无法评估某一用户到标识名 (DN) 的映射,则mongodmongosmongoldap会返回错误。

mongodmongosmongoldap会拒绝连接请求,并且不检查剩余映射(如果有)。

要指定用户到 DN 映射,请参阅:

从 MongoDB 4开始。 4 、 mongod / mongos实例现在以结构化 JSON 格式输出所有日志消息。日志条目被写入一系列键值对中,其中每个键表示一个日志消息字段类型,例如“严重性”,每个对应的值记录该字段类型的关联日志信息,例如“信息性”。

这包括发送到文件系统日志stdout (标准输出)日志目标的日志输出,以及getLog命令的输出。

以前,日志条目以明文形式输出。

以下 JSON 格式的日志消息表明mongod正在侦听并准备好连接:

{"t":{"$date":"2020-05-18T20:18:13.533+00:00"},"s":"I", "c":"NETWORK", "id":23015, "ctx":"listener","msg":"Listening on","attr":{"address":"127.0.0.1"}}
{"t":{"$date":"2020-05-18T20:18:13.533+00:00"},"s":"I", "c":"NETWORK", "id":23016, "ctx":"listener","msg":"Waiting for connections","attr":{"port":27001,"ssl":"off"}}

使用键值对的结构化日志记录允许通过自动化工具或日志摄取服务进行高效的日志分析,并使编程式日志解析更容易、更强大。

使用 MongoDB 结构化日志记录时,第三方 jq 命令行实用程序 是一个有用的工具,可以轻松美观地打印日志条目,以及强大的基于键的匹配和筛选。

jq 是一个开源 JSON 解析器,用于 Linux、Windows 和 macOS。

有关结构化日志记录的更多信息,包括日志条目组件的详细检查以及命令行解析示例,请参阅日志消息。

从 MongoDB 4开始。 4 , ldapQueryPassword setParameter命令接受字符串或字符串数组。如果设置为数组,则会尝试每个密码,直到有一个密码成功为止。这可用于在不停机的情况下对 MongoDB 执行 LDAP 帐户密码轮换。

MongoDB 4 。 4增加了对以下平台的支持:

MongoDB 4 。 4删除了对以下平台的支持:

  • Amazon Linux 2013 。 03

  • s390 x 架构上的 RHEL6 / CentOS6 / Oracle6

  • Windows 7 / Server 2008 R 2

  • Windows 8 / Server 2012

  • Windows 8 。 1 / 服务器2012 R 2

  • macOS 10 。 12

有关 MongoDB 4支持的平台和架构的完整列表,请参阅平台支持。 4 。

从 MongoDB4 开始。4 ,mongo Shell 支持使用 AWS IAM 档案 对已配置 AWS IAM 身份验证的 MongoDB Atlas 集群进行身份验证。

以这种方式进行身份验证会使用新的MONGODB-AWS authentication mechanism ,并要求您提供 AWS 访问密钥 ID 和秘密访问密钥,可以在连接字符串中指定或在命令行上通过--username--password选项。

此外,如果您使用的是 AWS 会话令牌 用于在使用 AssumeRole 时使用临时凭证进行身份验证 请求,或者在使用指定此值的 AWS 资源(例如 Lambda)时,您可以使用AWS_SESSION_TOKENauthMechanismProperties 值在连接字符串中提供该会话令牌,或在命令行中通过--awsIamSessionToken 选项提供该会话令牌。

或者,如果 AWS 访问密钥 ID、秘密访问密钥或会话令牌是使用各自的 AWS IAM 环境变量 在您的平台上定义的mongo Shell 使用这些环境变量值进行身份验证;您不需要在连接字符串中指定它们。

有关用法,请参阅连接字符串身份验证选项;有关示例,请参阅使用 MONGODB-AWS 连接到 Atlas 集群

从 MongoDB 4开始。 4 ,以下工具的文档已迁移到MongoDB Database Tools 项目:

MongoDB 数据库工具使用 Apache 许可证版本2 0。 。请参阅 mongodb/mongo-tools 以获取源代码。

注意

有关所列工具以前版本的文档,请参阅该版本的 MongoDB 服务器手册。

旧文档的快速链接:

MongoDB Enterprise 4 。 4提供了一个新的mongokerberos工具,用于验证平台的 Kerberos 配置是否与 MongoDB 一起使用,以及通过 Kerberos 测试端到端客户端身份验证。运行时, mongokerberos会返回一份报告,说明遇到的任何问题,并提供解决这些问题的潜在建议。 mongokerberos仅在 MongoDB Enterprise 中可用。

有关更多信息,请参阅mongokerberos参考页。

从 MongoDB4 开始。4 、mongoreplay 已从 MongoDB 打包中删除。mongoreplay 及其相关文档已迁移到 mongodb-labs github 项目。mongodb-labs 中的项目是实验性的,MongoDB 并未提供正式支持。

指向较旧文档的快速链接

Community 版和 Enterprise 版的Windows MSI 安装程序不包含MongoDB Database Toolsmongoimportmongoexport等)。要在 Windows 上下载并安装 MongoDB Database Tools,请参阅安装 MongoDB Database Tools。

如果您依赖 MongoDB 4 . 2或以前的 MSI 安装程序将 Database Tools 与 MongoDB Server 一起安装,现在您必须单独下载 Database Tools。

MongoDB 4 。 4添加了对使用单个哈希字段创建复合索引的支持。 MongoDB 4 。 2及更早版本仅支持单字段哈希索引。

以下操作在country_id上创建复合哈希索引:

db.examples.createIndex( { "country" : 1, "_id" : "hashed" } )

复合哈希索引需要将 featureCompatibilityVersion设置为4.4

从版本4开始。 4 ,MongoDB 添加了对查询规划器隐藏或取消隐藏索引的功能。对查询规划器隐藏的索引不会作为查询计划选择的一部分进行评估。

通过向规划器隐藏索引,您可以评估删除索引的潜在影响,而无需删除索引。如果影响是负面的,您可以取消隐藏索引,而不必重新创建已删除的索引。由于索引在隐藏时得到完全维护,因此一旦取消隐藏,隐藏的索引就可以立即使用。

有关详情,请参阅隐藏索引

为了支持隐藏索引,MongoDB 引入了:

如果为dropIndexes指定的索引仍在构建中, dropIndexes会尝试中止正在进行的构建。中止索引构建与删除构建的索引具有相同的效果。在 MongoDB 4之前。 4中,如果集合有任何正在进行的索引构建, dropIndexes将返回错误。此行为也适用于 Shell 助手db.collection.dropIndex()db.collection.dropIndexes()

要从一组相关的进行中的构建中删除特定索引,请等待索引构建完成,然后为dropIndexes或其 Shell 助手指定该索引。

有关更完整的文档,请参阅:

在删除collection之前, db.collection.drop()方法和drop命令会中止在目标collection上任何正在进行的索引构建。

对于副本集或分片副本集,中止主节点上的索引不会同时中止从节点索引构建。MongoDB 尝试中止主节点上指定索引正在进行的构建。如果成功,则会创建关联的 abort oplog 条目。节点如果有正在进行的构建的副本,则在提交或中止索引构建之前会等待来自主节点的提交或中止 oplog 条目。

对于副本集或分片副本集,中止主节点上的索引不会同时中止从节点索引构建。MongoDB 尝试中止主节点上指定索引正在进行的构建。如果成功,则会创建关联的 abort oplog 条目。节点如果有正在进行的构建的副本,则在提交或中止索引构建之前会等待来自主节点的提交或中止 oplog 条目。

在删除数据库之前, db.dropDatabase()方法和dropDatabase命令会中止任何正在进行的基于目标数据库中collection的索引构建。中止索引构建与删除构建的索引具有相同的效果。

提示

MongoDB 4 。 4弃用了geoHaystack索引和geoSearch命令。请改用带有$geoNear$geoWithin的2 d 索引。

MongoDB 删除以下命令和mongo Shell 助手:

已删除的命令
已删除助手
替代品
cloneCollection
db.cloneCollection()
planCacheListPlans
PlanCache.getPlansByQuery()
另请参阅$planCacheStats更改
planCacheListQueryShapes
PlanCache.listQueryShapes()
另请参阅$planCacheStats更改

从 MongoDB 4开始。 4 、 mongodmongos默认支持 TCP 快速打开 (TFO) 连接。 TFO 要求客户端和mongod/mongos主机都支持并启用 TFO:

Windows

以下 Windows 操作系统支持 TFO:

  • Microsoft Windows Server 2016或更高版本。

  • Microsoft Windows 10 Update 1607或更高版本。

macOS
macOS 10 。 11 (El Capitan) 及更高版本支持 TFO
Linux

运行 Linux 内核3的 Linux 操作系统。 7或更高版本可支持入站 TFO 连接。

运行 Linux 内核4的 Linux 操作系统。 11或更高版本可支持入站和出站 TFO 连接。

设置/proc/sys/net/ipv4/tcp_fastopen的值以启用对入站和/或出站 TFO 连接的支持:

  • 设置为1以仅启用出站 TFO 连接

  • 设置为2以仅启用入站 TFO 连接

  • 设置为 3 以启用入站和出站 TFO 连接。

MongoDB 4 。 4添加了以下用于控制 TFO 的参数:

范围
说明

默认值true (已启用)

启用或禁用对入站 TFO 连接的支持 mongod/mongos

默认值true (已启用)

仅 Linux 操作系统

启用或禁用对来自mongod/mongos的出站 TFO 连接的支持。

默认值1024

控制待处理 TFO 连接队列的大小。

MongoDB 4 。 4将以下计数器添加到serverStatusdb.serverStatus()的输出:

计数器
说明

仅 Linux

表示内核对 TFO 的支持。

指示操作系统对传入 TFO 连接的支持。
表示操作系统对传出 TFO 连接的支持。
表示自上次启动 以来,已接受的到 /mongodmongos 的传入mongod/mongos TFO 连接总数。

对 TFO 的完整讨论超出了本文档的范围。有关 TFO 的更多信息,请从以下外部资源入手:

如果 MongoDB 无法使用一个或多个索引来获取给定cursor.sort()操作的排序顺序,则 MongoDB 必须对数据执行阻塞排序。阻塞排序表示 MongoDB 必须使用并处理要排序的所有输入文档,然后才能返回结果。阻塞排序不会阻塞对集合或数据库的并发操作。

MongoDB 4之前的版本。 4 ,如果阻塞排序操作需要超过32 MB 的系统内存,则 MongoDB 将返回错误。从 MongoDB 4开始。 4 ,阻塞排序操作会将用于排序操作的系统内存限制增加到100 MB。对于需要超过100 MB 的系统内存的阻塞排序操作,除非查询指定cursor.allowDiskUse() ,否则 MongoDB 将返回错误( MongoDB 中的新增功能4 。 4 )。

有关排序和索引使用的更多信息,请参阅排序和索引使用。

MongoDB4 4。find 向 命令添加了一个新选项 allowDiskUse 。通过使用 allowDiskUse: true ,在处理超过 MB 内存限制的非索引(“阻塞”) 排序100 操作时,操作可以使用磁盘上的临时文件。在 MongoDB 之前。 ,如果在处理排序时超出内存限制,则具有阻塞排序的4 4find操作会失败。

对于带有 和db.collection.find() cursor.sort()MongoDB4 4的cursor.allowDiskUse() shell 方法。 添加 游标修饰符。

cursor.allowDiskUse()如果 MongoDB 可以满足使用 索引 的排序, 或者 阻塞排序需要少于100 MB 的内存,则 allowDiskUse 和 不起作用。

有关为通过 MongoDB 驱动程序发出的查询启用allowDiskUse的说明,请参阅您首选MongoDB 4的文档。 4兼容驱动程序。

从 MongoDB 4开始。 4 、

未分片collection和视图的命名空间长度限制为255字节,分片collection的命名空间长度限制为235字节。对于collection或视图,命名空间包括数据库名称、点 ( . ) 分隔符和collection/视图名称(例如<database>.<collection> )。

$currentOpcurrentOp 命令包含用于正在进行的验证操作的 dataThroughputAveragedataThroughputLastSecond 信息。

验证操作的日志消息包括 dataThroughputAveragedataThroughputLastSecond 信息。

从 MongoDB 4开始。 4 、 compact仅阻止以下元数据操作:

compact不会阻止当前正在操作的数据库的MongoDB CRUD 操作

以前, compact会阻止其正在操作的数据库的所有操作,包括MongoDB CRUD 操作,因此仅适合在计划维护期间使用。

从 MongoDB4 开始。4 ,force compact标志会强制 副本集中 的 主 节点上运行。

force以前,如果将true compact选项设置为false ,则 可以在 副本集中 的 主 节点上运行;如果设置为 ,则会在 主节点上运行时返回错误。

提示

另请参阅:

从 MongoDB 4开始。 4后, mongod --repair会为以下内容重建所有索引:

  • 集合数据与一个或多个索引不一致的集合。

  • 已挽救和修改的集合。

在 MongoDB 的早期版本中, mongod --repair选项会为所有集合重新构建所有索引。

serverStatus返回flowControl.locksPerKiloOp而不是flowControl.locksPerOp

serverStatus 在其输出中包含以下新字段:

shardingStatistics.numHostsTargeted 报告 CRUD 操作和聚合命令所针对的分片的数量。它会随着集群上的每个操作而递增相关的查找、插入、更新、删除或聚合指标。

replSetGetStatus 返回以下新字段:

从 MongoDB 4开始。 4中,如果您没有传入密码, mongo Shell 方法db.auth(<username>, <password>)会提示您输入密码,也没有为<password>传入passwordPrompt()方法。

find 视图$natural 运行 操作时,可以指定 排序。

对于在 Linux 上运行的 MongoDB 实例:

  • mongodmongos 进程收到 SIGUSR2 信号时,回溯详细信息将添加到每个进程线程的日志中。

  • 回溯详细信息显示该进程的函数调用,可用于诊断并在需要时提供给 MongoDB 支持。

回溯功能可用于以下架构:

  • x86_64

  • arm64 (从 MongoDB 5 . 0 . 10和6 . 0开始)

有关更多信息,请参阅生成回溯。

从 MongoDB 4开始。 4 , FTDC现在从容器(而不是主机操作系统)的角度报告在容器中运行的mongod的利用率数据。有关更多信息,请参阅全时诊断数据捕获

从 MongoDB 4开始。 4中,如果平台为打开文件数配置的ulimit值低于64000 ,则mongod会记录启动警告。以前,仅当该值低于1000时才会记录警告。有关更多信息,请参阅推荐的ulimit设置

MongoDB 4 。 4将replanReason字段添加到数据库分析器输出诊断日志消息中。 replanReason字段包含查询系统逐出缓存计划的原因。

dbStats命令及其mongo Shell 助手db.stats()返回:

collStats命令、其mongo Shell 助手db.collection.stats()$collStats聚合阶段返回:

从 MongoDB 4开始。 4 ,以下数据库命令可以接受hint参数来指定要使用的索引:

请参阅:

从 MongoDB 4开始。 4 ,MongoDB 允许在mongos实例上执行 JavaScript。要在mongos实例上禁用 JavaScript 执行:

早期版本的 MongoDB 不允许在mongos实例上执行 JavaScript。

注意

需要 featureCompatibilityVersion 4.4+

副本集或分片集群中的每个mongod必须featureCompatibilityVersion设置为至少4.4才能配置全局默认读关注和写关注。

从 MongoDB 4开始。 4 、副本集和分片集群支持配置全局默认读关注和写关注设置。未显式指定给定读关注或写关注设置的客户端会继承相应的全局默认设置。

为了配置默认的全局默认读关注或写关注,MongoDB 添加了setDefaultRWConcern管理命令。对于副本集,请针对主节点成员发出命令。对于分片集群,请从mongos发出命令。

为了检索全局默认读关注或写关注设置,MongoDB 添加了getDefaultRWConcern管理命令。

从 MongoDB 4开始。 4 ,读关注对象可以包含provenance字段,指示读关注的来源。

下表显示了可能的读关注 provenance 值及其重要性:

来源
说明
clientSupplied
应用程序中指定了读关注问题。
customDefault
读关注源于一个自定义的默认值。参见 setDefaultRWConcern
implicitDefault
由于没有其他写关注规范,写关注源自服务器。

如果记录或分析了读操作,则操作条目包含读关注对象,包括provenance字段。

MongoDB 不建议在向服务器发出的请求中指定provenance字段。此字段只应用于诊断目的。

从 MongoDB 4开始。 4 ,写关注对象可以包含provenance字段,指示写关注的来源。

下表显示了可能的写关注 provenance 值及其重要性:

来源
说明
clientSupplied
应用程序中指定了写关注。
customDefault
写入关注源自自定义的默认值。请参阅 setDefaultRWConcern
getLastErrorDefaults
写关注源自副本集的 settings.getLastErrorDefaults 字段。
implicitDefault
在没有所有其他写入关注规范的情况下,写入关注源自服务器。

如果记录或分析了写入操作,则操作条目包含写关注对象,包括provenance字段。

MongoDB 不建议在向服务器发出的请求中指定provenance字段。此字段只应用于诊断目的。

MongoDB 4 。 4 Enterprise 引入了两个新的配置设置,以增强与 KMIP 服务器的初始连接,作为 Kerberos 身份验证的一部分:

要控制mongod重试与 KMIP 服务器初始连接失败的次数:

要控制放弃或重试之前等待 KMIP 服务器初始响应的超时时间(以毫秒为单位):

这些设置仅在 MongoDB Enterprise 中可用。

的新processUmask mongod启动选项允许您通过 umask 设置权限 适用于群组和其他用户(当honorSystemUmask 设置为false 时)。

从 MongoDB 4开始。 4 、 mapReduce命令和db.collection.mapReduce() shell 方法会忽略verbose选项。

从 MongoDB 4开始。 4 ,可以使用explain命令或db.collection.explain() shell 方法预览mapReducedb.collection.mapReduce()的结果。

从版本 4.4 开始:

提示

另请参阅:

从 MongoDB 4开始。 4 ,所有数据库命令都支持按以下方式指定comment字段:

例子

db.runCommand( { <command> , "comment" : <any BSON type> })

设置后,注释将与命令记录一起出现在以下位置:

评论必须是有效的BSON 对象(字符串、整数、数组等)。

从 MongoDB 4开始。 4 ,使用位置$操作符时,可以在查询文档和投影文档之间指定不同的数组字段。

例如,如果将以下文档插入到集合中:

db.foo.insertOne( { a: [ "one", "two", "three" ], b: [ 1, 2, 3 ] } )

从 MongoDB 4开始。 4 ,可以使用以下查询仅投影与字段a上指定的查询匹配的文档的字段b中的第一个元素:

db.foo.findOne( { a: "one" }, { "b.$": 1 } )

重要

为确保达到预期行为,查询文档和投影文档中使用的数组必须具有相同长度。 如果数组的长度不同,在某些情况下操作可能会出错。

在 MongoDB 的早期版本中,此操作会失败,因为受限制的数组字段必须出现在查询文档中。

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

重要

特征兼容性版本

要从4升级。 2部署时, 4 。 2部署必须将featureCompatibilityVersion设置为4.2 。要检查版本:

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

有关验证和设置featureCompatibilityVersion的具体详情,以及有关升级的其他先决条件/注意事项的信息,请参阅单独的升级说明:

如果您需要有关升级到4的指导。 4 , MongoDB 专业服务提供主要版本升级支持,帮助确保 MongoDB 应用程序平稳过渡而不中断。

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

例如,您可以将4 442降级。将 系列转换为 。 - 系列部署。但是,进一步降级该 。部署到 的 系列。不支持4 240系列部署。

要下载 MongoDB 4 。 4 ,转到MongoDB 下载中心

提示

另请参阅:

版本中
问题
状态
4.4.0
SERVER-45042 :社区版和企业版的 MongoDB 服务器安装 MSI 不再包含 MongoDB 数据库工具 的二进制文件。有关更多信息,请参阅 工具更改。
未解决
4.4.0
SERVER-49694 :在分片集群上,nearest 读取或 对冲读 可能不会路由到邻近分片副本。
在4中已修复。 4 。 1
4.4.0
WT-6623 :设置恢复文件扫描的连接级别文件 ID。
在4中已修复。 4 。 1

要报告问题,请参阅 https://github.com/mongodb/mongo/wiki/Submit-Bug-Reports 有关如何为 MongoDB 服务器或相关项目之一提交 JIRA 票证的说明。

← 5.0 变更日志