MongoDB 4.4发行说明

集合

所有并集($unionWith阶段)

MongoDB4.4添加了$unionWith聚合阶段, 提供组合来自多个 集合合并到单个结果集中。

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

自定义聚合表达式

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

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

注意:

即使在4.4版本之前,各种map-reduce表达式也可以 可以使用其他聚集流水线操作符,例如$group$merge等,而不需要定制功能。

有关详细信息,请参见 映射缩减到聚合管道。

新的聚合运算符

操作员 说明
$accumulator 返回用户定义的 累加器运算符。
$binarySize 返回给定字符串或二进制数据值的 以字节为单位的内容。
$bsonSize 返回给定文档的字节大小(即bsontype Object)编码为 BSON。
$first 返回数组中的第一个元素。
$function 定义自定义聚合表达式。
$last 返回数组中的最后一个元素。
$isNumber 返回布尔值如果指定的表达式解析 到一个整数十进制加倍、或返回布尔值假的如果表达式解析为任何其他 BSON型、或 遗漏的字段
$replaceOne 替换给定输入中匹配字符串的第一个实例。
$replaceAll 替换给定输入中匹配字符串的所有实例。

一般聚合改进

$输出

从MongoDB 4.4开始:

  • $out可以输出到中的集合 不同的数据库。在早期版本中,$out只能 输出到同一数据库数据库中的集合 运行聚集。
  • $out只能在副本集辅助节点上运行,如果 群集中的所有节点都有 功能兼容性版本设置为4.4或 更高,读取首选项允许二次读取。 检查您的驱动程序文档,以查看您的 驱动程序添加了支持。
$索引统计

从MongoDB 4.4开始(从4.2.4开始也可用), $indexStats在其输出中包含以下字段:

字段 说明
shard 碎片的名称(如果适用)。
spec 索引规范文档
building 指示当前是否正在生成索引的布尔标志。
$合并

从MongoDB 4.4开始:

  • $merge 可以输出到集合中 不同的数据库。在早期版本中, $merge can 仅输出到同一数据库中的集合 正在运行。
  • $merge只能在副本集辅助节点上运行,如果 群集中的所有节点都有 功能兼容性版本设置为4.4或 更高,读取首选项允许二次读取。 检查驱动程序文档以查看 当你的司机增加了支持。

从MongoDB 4.4开始,$merge可以输出到相同的 正在聚合的集合。您还可以输出到 出现在管道的其他阶段的集合,例如$lookup

MongoDB 4.4之前的版本不允许$merge到 输出到与正在聚合的集合相同的集合。

警告:

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

$planCacheStats更改

从4.4版开始:

$collStats更改

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

collectionScans字段包含一个嵌入文档,该文档带有以下字段:

字段名称 说明
total 一个64位整数,给出查询总数, 已执行集合扫描。总数包括以下查询 是否使用了 可尾游标。
nonTailable 一个64位整数,给出执行 未使用 可尾游标。

解释变更

从MongoDB 4.4开始,当您运行 数据库。集合。解释()。聚合() 方法输入执行统计信息以及所有计划执行模式,每个 流水线级列在 解释输出包括 n退回以及 执行时间毫秒估计

复本集

可恢复的初始同步

从MongoDB 4.4开始,执行初始同步的辅助服务器可以尝试 以恢复同步过程,如果被中断瞬变(即 临时)网络错误、集合删除或集合重命名。该 同步源还必须运行MongoDB 4.4以支持可恢复初始同步。 如果同步源运行MongoDB 4.2或更早版本,则辅助服务器必须 重新启动初始同步过程,就好像它遇到非瞬态 网络错误。

默认情况下,次映像将尝试恢复初始同步24小时。 MongoDB 4.4添加了 初始同步瞬时错误重试周期秒服务器 用于控制次系统尝试 恢复初始同步。如果次映像无法成功恢复 初始同步过程,它将选择新的 从副本集中删除健康源,并重新启动初始 同步过程从头开始。

在MongoDB 4.4之前,辅助服务器将重新启动整个初始 同步,如果在此过程中遇到错误。

流式复制

从MongoDB 4.4开始,来自源的同步发送连续 操作日志条目流到其 正在同步辅助节点。

在MongoDB 4.4之前,辅助服务器获取批量操作日志条目,方法是向它们的同步 从源并等待响应。这需要网络往返 每批操作日志条目。蒙哥数据库 4.4添加了操作日志Fetcher使用排气启动参数用于 禁用流式复制并使用较旧的复制行为。

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

回滚目录

从Mongo 4.4开始,集合的回滚目录命名为 在集合的UUID之后,而不是在集合命名空间之后;例如:

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

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

最短操作日志保留期

从MongoDB4.4开始,您可以指定最小小时数 以保留操作日志条目。该mongod仅去除了 操作日志条目如果

  • 操作日志已达到配置的最大大小并且
  • 操作日志条目早于配置的小时数 在主机系统时钟上。

默认情况下,MongoDB不设置最小操作日志保留期, 自动截断操作日志从最旧的条目开始到 保持所配置的最大操作日志大小。

要在启动时配置最短操作日志保留期,请执行以下操作 mongod,或者:

在运行的上配置操作日志的最短保留期 mongod, 使用 replSetResizeOplog.设置 最短操作日志保留期,而 mongod 将覆盖启动时设置的任何值。您必须更新 相应配置文件设置的值或 命令行选项通过服务器保存这些更改 重新启动。

操作日志可以不受限制地增长,以便保留操作日志条目 持续配置的小时数。这可能导致减少或 系统磁盘空间耗尽,原因是大量写入 体积和长保留期。

另见:

副本集操作日志

slowOpSampleRate影响辅助日志

从MongoDB 4.4开始,副本集辅助节点上的 慢速操作日志应用程序会受到 slowOpSampleRate的影响。在以前的版本中,MongoDB记录所有慢的操作日志条目,而不管采样率如何。

slowOpSampleRate指定分数 应分析或记录的缓慢操作。

在数据承载副本集成员上同时生成索引

需要功能兼容性版本4.4+

每个mongod在副本集或分片群集中 必须功能兼容性版本设置为 最少4.4要同时启动索引构建 副本集成员。

MongoDB 4.4运行特性兼容性版本:“4.2”版本 在将索引生成复制到之前,在主服务器上创建索引 二级。

从MongoDB4.4开始,索引在副本集上构建,或者在所有承载数据的副本集成员之间同时构建分片集群。对于分片集群,索引构建只发生在包含被索引集合的数据的分片上。主服务器需要最小数量的数据承载 voting成员(即提交法定数量),包括其自身,这些成员必须在将索引标记为可供使用之前完成构建。

缺省情况下,索引生成使用所有数据承载投票的提交仲裁 成员。若要使用非默认提交仲裁启动索引生成, MongoDB 4.4 adds the commitQuorum parameter to createIndexes or its shell helpers db.collection.createIndex() and db.collection.createIndexes().

修改正在进行的索引所需的仲裁 build, MongoDB 4.4 introduces the new setIndexCommitQuorum 命令。

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

副本集重新配置更改

更改为重新设置重新配置

从MongoDB 4.4开始, replSetReconfig g命令等待,直到大多数投票成员安装了副本配置,然后返回成功。投票成员是 members[n].votes为1的任何复制成员,包括仲裁者。首先,该操作等待直到提交当前配置,然后才在主服务器上安装新配置。然后,该操作等待,直到大多数投票成员安装了新配置,然后才成功返回。有关详细信息,请参阅Reconfiguration Waits Until a Majority of Members Install the Replica Configuration

replSetReconfig无限期等待大多数 投票成员安装配置。mongoDB数据库4.4 还会将可选的maxTimeMS参数添加到 replSetReconfig,用于指定最大数量的 等待操作成功返回的时间。

从MongoDB 4.4开始,replSetReconfig命令允许一次添加或删除不超过1个投票成员。要添加或删除多个投票成员,请执行一系列replSetReconfigrs.reconfig()操作,以便一次添加或删除一个成员。有关详细信息,请参阅Reconfiguration Can Add or Remove No More than One Voting Member at a Time.

更改为复制设置获取配置

replSetGetConfig命令可以指定新的选项commitmentStatus:在主服务器上运行时为true。与选项一起运行时,命令在输出中包含commitmentStatus字段。此输出字段指示副本集的上一次重新配置是否已提交,以便副本集可以再次重新配置。有关详细信息,请参见replSetGetConfig 命令。

对复制副本配置文档的更改

MongoDB 4.4将 term字段添加到副本集configuration document中。副本集成员使用术语和版本来就“最新”副本配置达成共识。设置功能兼容性版本(fCV):"4.4":隐式执行 replSetReconfig以将术语字段添加到配置文档和块,直到新配置传播到大多数副本集成员。同样,降级为fCV:“4.2”隐式执行重新配置以删除术语字段。

首选初始同步源

从MongoDB4.4开始,您可以指定首选的初始同步 源使用初始同步源读取首选项参数。 您只能将此参数设置为mongod启动,使用 或者设置参数配置文件设置或 - -设置参数启动,使用 或者设置参数配置文件设置或 - -设置参数命令行选项。

initialSyncSourceReadPreference支持以下读取首选项模式:

如果副本集已禁用chaining,则默认initialSyncSourceReadPreference读取首选项模式为主primary

您无法为initialSyncSourceReadPreference.指定标记集或maxStalenessSeconds。

另见:

初始同步源选择

镜像读取

从版本4.4开始,MongoDB提供镜像读取来预热可当选次要成员的高速缓存 最近访问的数据。使用镜像读取,主服务器可以 镜像的子集操作它接收和发送它们 到可当选的次级候选人的子集。预热的缓存 辅助服务器有助于在选举后更快地恢复性能。

注意:

主服务器对客户端的响应不受 镜像读取。镜像读取是"即发即弃"操作 由主要负责人;即,主服务器不等待响应 镜像读取。

镜像读取参数

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

参数 说明
mirrorReads 指定镜像读取的samplingRate和maxTimeMS设置。
{采样率:,最大时间MS:}
samplingRate为0将关闭镜像读取。
镜像读取度量

命令serverStatus及其对应的 mongo shell方法db.serverStatus()返回 mirrored如果指定字段的包含,则读取 在操作中:

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

db.serverStatus( { mirroredReads: 1 } )

副本集写入确认

从MongoDB 4.4开始, STARTUP2状态不参与写入多数。

另见:

写入副本集的关注

碎片化群集

可优化的碎片密钥

从4.4开始,MongoDB提供了refineCollectionShardKey命令。使用新命令, 您可以通过添加后缀字段或 字段添加到现有键。细化集合的碎片密钥允许 以实现更细粒度的数据分发,并且可以解决 其中现有密钥已导致jumbo (i.e. indivisible) chunks基数不足而导致的块。

例如,您可能有一个现有的orders集合,其shard键{customer_id:1}。您可以通过向碎片密钥添加后缀order_id字段来更改碎片密钥,以便{ customer_id: 1, order_id: 1 }成为新的shard键,允许按customer_id和order_id字段分发数据

要使用refineCollectionShardKey命令,分片群集的功能兼容版本(fcv)必须为4.4。有关详细信息,请参见refineCollectionShardKey命令。

注:

在优化碎片密钥后,可能不是所有文档都在 集合具有后缀字段。要填充缺失的 碎片键字段,请参见缺少碎片键字段。

在优化碎片密钥之前,请确保中的所有或大多数文档 集合具有后缀字段(如果可能),以避免 以在以后填充该字段。

在早期版本中,一旦选择了一个碎片密钥,就无法修改 碎片密钥。

重要:

缺少碎片密钥

有了使用后缀细化碎片密钥的能力,可能会 并非集合中的所有文档都具有后缀字段。开始于 版本4.4,碎片化集合中的文档可能缺少碎片 关键字段。在早期版本中,每个 用于碎片化集合的文档。有关详细信息,请参见 缺少碎片关键字字段。

对冲读数

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

每个操作指定对冲读取作为读取首选项的一部分。非primary读取首选项支持对冲读取。Read preferencenearest指定默认对冲读取。

有关更多信息,请参阅:

对冲读取参数

参数 说明
readHedgingMode 启用或禁用 mongos 实例支持 对冲读取。
maxTimeMSForHedgedReads 指定事件的最大时间限制(以毫秒为单位) 附加读取发送至 回避

读取偏好的对冲读取选项

MongoDB 4.4引入了一个用于指定读取首选项的对冲读取 对冲读取期权。使用MongoDB进行设置 驱动程序,请参阅驱动程序读取首选项API 文件。

下面的mongo shell方法可指针.readPref()

蒙古集读取首选项()以接受hedge 为指定读取偏好启用对冲读取的选项:

对冲读取指标

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

平衡器收集状态命令

MongoDB 4.4提供了命令balancerCollectionStatus和mongo shell helper方法sh.balancerCollectionStatus(),它们返回关于在命令运行或需要移动时,分片集合的块是否平衡(即不需要移动)的信息。使用命令,用户可以验证初始区块创建和迁移是否已完成。

改进的mongos启动过程

从MongoDB 4.4开始,mongos添加了以下新的 默认启动行为:

  • mongo现在将预载一个分片集群的路由 表,而不是在第一次启动时按需执行此操作 传入的客户端连接。
  • mongos现在将预热它的连接池到shard 主机,而不是按需为传入 客户端连接。

这种行为可以在 mongos实例启动或重新启动后更快地为初始客户端连接提供服务。特别是,这允许使用多个 mongos实例的站点在必要时重新启动它们,或者添加新的实例,而不需要初始客户端请求那些需要等待连接建立的实例。

路由表预加载和连接池预热都已启用 默认情况下。

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

改进了路由表更新

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

复合散列碎片密钥img

从MongoDB4.4开始,您可以使用一个复合词来切分集合 具有单个散列字段分片密钥。在4.4之前,MongoDB不 支持带有散列字段复合共享密钥。

复合散列分片支持以下功能区域切割,其中前缀(即第一个)非散列字段或 字段支持区域范围,而散列字段支持更均匀 分片数据的分发。例如,以下操作 在支持zoned的复合哈希碎片键上碎片化集合 切片:

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开始,默认情况下,配置服务器服务器会检查碎片之间是否有分片集合的索引不一致。Thecommand serverStatus返回字段shardedIndexConsistency,以报告在配置服务器主服务器主服务器上运行时的索引不一致情况。

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

参数 描述
enableShardedIndexConsistencyCheck 启用或禁用索引一致性检查。
shardedIndexConsistencyCheckIntervalMS 配置服务器主服务器检查分片集合索引一致性的间隔。
并发removeShard操作

从MongoDB 4.4开始,您可以进行多个removeShard操作。

In earlier versions, removeShard returns an error if another removeShardoperation is in progress.

碎片键限制

从4.4版本开始,MongoDB取消了碎片键大小的512字节限制。对于MongoDB 4.2及更早版本,碎片键不能超过512字节。

部分结果

从4.4开始,如果find或随后的getMore命令因查询的碎片不可用而返回部分结果,则输出包括一个布尔标志 partialResultsReturned

巨型块迁移

对于太大而无法迁移的块,从MongoDB 4.4开始:

改进的目录缓存刷新

从4.4开始,如果有陈旧的块,只有当路由器访问以前有或现在有该块的碎片时,目录缓存才会刷新。

在MongoDB 4.4之前,任何陈旧的块都会导致集合的整个块分发被标记为陈旧,并迫使所有联系碎片的路由器刷新其碎片目录缓存。MongoDB 4.4添加了 enableFinerGrainedCatalogCacheRefresh启动参数,用于仅针对目标碎片禁用目录缓存刷新,并使用旧的目录缓存刷新行为。TheenableFinerGrainedCatalogCacheRefresh参数默认为true

自动拆分system.sessions集合

从4.4(和4.2.7版本)开始,MongoDB会自动将system.sessions集合拆分为至少1024个块,并将块均匀地分布在集群中的碎片上。

放映

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

  • find()findAndModify()投影可以接受聚合表达式和聚合语法,包括使用文字和聚合变量。通过使用聚合表达式和语法,您可以用新值投影新字段或项目现有字段。
  • find()findAndModify()投影可以使用嵌套形式指定嵌入式字段;例如{ field: { nestedfield: 1 } }以及点符号。在早期版本中,您只能使用点符号。

有关更多信息,请参阅:

另见:

路径碰撞限制

$meta运算符号

$meta关键词支持

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

{ $meta: "textScore" }使用与find()

从4.4版本开始,MongoDB在使用withdbdb.collection.find()时进行以下{ $meta: "textScore" }更改

  • 您必须在查询谓词中使用{ $meta: "textScore" }中指定$text运算符

  • 您可以根据生成的文档的搜索相关性对它们进行排序,即{ $meta: "textScore" },而无需投影textScore

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

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

    在以前版本的MongoDB中,如果您在投影和排序中都包含{ $meta: "textScore" },则必须同时在两个地方指定相同的字段名称。

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

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

交易

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

在事务中创建集合时:

在事务中创建索引时:

  • 您可以在不存在的集合上创建索引。集合是作为操作的一部分创建的。
  • 您可以在同一事务中早些时候创建的新空集合上创建索引。
  • 如果对系统集合执行,db.collection.createIndex()方法将失败

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

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

要在事务中显式创建集合或索引,事务读取关注级别必须是"local"显式创建是通过:

指挥权 方法
create db.createCollection()
createIndexes db.collection.createIndex()db.collection.createIndexes()

另见:

分类

$sort变化

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

为了保证在重复值上使用sort()时的排序一致性,请在排序中包含一个仅包含唯一值的附加字段。

这可以通过将_id字段添加到您的排序中来轻松实现。

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

安全改进

新的Kerberos验证工具mongokerberos

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

OCSP协议

从版本4.4开始,MongoDB默认启用OCSP (联机证书状态协议)检查证书 撤销。OCSP的使用消除了定期 下载证书吊销列表(CRL)并重新启动 mongod/mongos,具有更新的CRL。

在版本4.0和4.2中,只能通过 使用Windows或macOS上的系统证书存储

另见:

TLS/SSL(传输加密)

OCSP吻合/必须吻合

作为OCSP支持的一部分,MongoDB 4.4支持以下 Linux操作系统:

  • OCSP stapling:使用OCSP stapling, mongod and mongos instances 将OCSP状态响应附加或"装订"到他们的证书上 在TLS/SSL期间向客户端提供这些证书时 握手。通过将OCSP状态响应包含在 证书,OCSP装订消除了客户端进行 检索所提供的OCSP状态的单独请求 证书

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

OCSP参数

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

参数 说明
ocspEnabled 启用或禁用OCSP支持。
ocspValidationRefreshPeriodSecs 指定刷新 已装订OCSP状态响应。
tlsOCSPStaplingTimeoutSecs 指定最大秒数 mongod / mongos 实例应 等待接收其证书的OCSP状态响应。
tlsOCSPVerifyTimeoutSecs 指定执行 mongod / mongos 应该等待 OCSP在验证客户端证书时响应。

x.509证书即将到期触发警告

从MongoDB 4.4开始,如果x.509证书在mongod / mongos系统时钟的30天内过期, mongod / mongos会在连接时记录一个警告。具体来说,以下到mongod或mongos的连接可能会触发x.509证书过期警告:

警告日志消息如下所示:

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

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

MongoDB 4.4添加了tlsX509过期警告阈值天数 用于控制证书过期警告阈值的参数。设置 将参数设置为0以禁用警告。完成 文档,请参见tlsX509过期警告阈值天数

TLS 1.3支持

在CentOS 8和RHEL 8上,MongoDB 4.4(以及版本4.2、4.0和 3.6)支持TLS1.3。

用户到DN映射退出网络或身份验证失败

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

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

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

结构化日志记录

从MongoDB4.4开始, mongod / mongos 实例现在输出所有日志消息结构化JSON格式。日志条目作为一个系列写入 键-值对,其中每个键指示日志消息字段类型, 例如"严重性",并且每个对应的值记录了相关联的 记录该字段类型的信息,如"信息"

这包括发送到文件的日志输出、syslogstdout(标准输出)日志目的地,以及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。

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

多个LDAP密码支持

从MongoDB 4.4开始,ldapQueryPassword setParameter命令接受字符串或 字符串数组。如果设置为数组,则尝试每个密码 直到有人成功。这可用于执行滚动 MongoDB无需停机即可使用LDAP帐户密码。

平台支持

添加的平台

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

移除平台

MongoDB 4.4取消了对以下平台的支持:

  • 亚马逊Linux 2013.03
  • s390x架构上的RHEL 6 / CentOS 6 / Oracle 6
  • Windows 7 / Server 2008 R2
  • Windows 8 / Server 2012
  • Windows 8.1 / Server 2012 R2
  • macOS 10.12

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

Mongo Shell

Mongo Shell支持Atlas集群的AWS IAM凭据

从MongoDB 4.4开始,`mongo shell支承 使用AWS IAM凭据

以验证到MongoDB地图集群集 已配置AWS IAM身份验证。

以这种方式进行身份验证将使用新的MONGODB-AWS 身份验证机制,并要求 提供AWS访问密钥ID和密码 访问键,它可以在连接字符串中指定,也可以在命令行上通过 - 用户名-密码选项。

此外,如果您使用的是AWS会话令牌

使用时使用临时凭据进行身份验证假设角色

请求,或使用指定此值的AWS资源时,例如 作为Lambda,您可以在连接字符串中提供该会话令牌 使用AWS会话令牌授权机制属性 值,或在命令行上通过--awsIam会话令牌选项卡页面上创建或编辑条目.

或者,如果AWS访问密钥ID、秘密访问密钥或 会话令牌是在您平台上使用其各自的 AWS IAM环境变量

蒙戈Shell将使用这些环境 要验证的变量值;您不需要在中指定它们 连接字符串。

请参见连接字符串身份验证选项 ,以及使用MONGODB-AWS连接到Atlas群集的示例。

工具

迁移到MongoDB数据库工具项目

从MongoDB 4.4开始,以下工具的文档已迁移到MongoDB数据库工具项目:

MongoDB数据库工具使用Apache许可证2.0版。看mongodb/mongo-tools对于源代码。

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

旧文档的快速链接:

新的mongokerberos Kerberos验证工具

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

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

mongoreplay从MongoDB包装中删除

从MongoDB 4.4开始,mongoreplay从MongoDBpackaging中删除。mongoreplay及其相关文档被迁移到mongodb-labsgithub项目。mongodb-labs的项目是实验性的,不受MongoDB的正式支持。

旧文档的快速链接

MongoDB数据库工具未与Windows MSI一起打包

从4.4版本开始,社区版和企业版的Windows MSI安装程序不包括MongoDB数据库工具mongoimportmongoexport等)。要在Windows上下载和安装MongoDB数据库工具,请参阅安装MongoDB数据库工具。

如果您依赖MongoDB 4.2或之前的MSI安装程序与MongoDB服务器一起安装数据库工具,您现在必须单独下载数据库工具。

驱动器

新驱动程序

索引

复合散列指数

MongoDB 4.4增加了对使用单散列字段创建复合索引的支持。MongoDB 4.2及更早版本仅支持单字段散列索引。

以下操作在country _id上创建一个复合哈希索引:

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

复合散列索引需要将特征兼容性版本设置为4.4

另见:

复合散列碎片键

隐藏索引

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

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

有关详细信息,请参阅隐藏索引。

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

dropIndexes可以中止进行中的索引构建

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

若要从一组相关的正在进行的生成中删除特定索引, 等待索引生成完成,然后将该索引指定为 dropIndexes或其外壳帮助器。

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

drop()可以中止正在进行的索引生成

从MongoDB 4.4开始,db.collection.drop()方法和 drop命令中止任何正在进行的索引生成 在删除集合之前删除目标集合。MongoDB之前 4.4,尝试删除正在进行索引生成的集合 将导致错误,并且不会删除集合。

对于副本集或碎片副本集,中止主服务器上的索引 不会同时中止辅助索引生成。MongoDB尝试 中止上指定索引的正在进行的生成 如果成功,则创建关联的中止 操作日志条目。次要成员 复制的正在进行的生成等待提交或中止操作日志条目 在提交或中止索引生成之前,从主索引生成。

对于副本集或碎片副本集,中止主服务器上的索引 不会同时中止辅助索引生成。MongoDB尝试 中止上指定索引的正在进行的生成 如果成功,则创建关联的中止 操作日志条目。次要成员 复制的正在进行的生成等待提交或中止操作日志条目 在提交或中止索引生成之前,从主索引生成。

dropDatabase可以中止正在进行的索引生成

从MongoDB 4.4开始,db.dropDatabase()方法和dropDatabase命令在删除数据库之前中止目标数据库集合上的任何进行中的索引构建。中止索引构建与删除构建索引具有相同的效果。在MongoDB 4.4之前,尝试删除包含具有进行中索引构建的集合的数据库会导致错误,数据库不会被删除。

另见:

基于填充集合的索引构建

弃用geoHaystack索引和geoSearch命令

MongoDB 4.4不建议使用geoHaystack索引和geoSearch命令。使用$geoNear$geoWithin2d索引

移除了命令

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

删除命令 已删除助手 替代品
cloneCollection db.cloneCollection() 使用mongoexport蒙古进口公司,或使用聚合管道$out$合并阶段,或使用驱动程序编写脚本。
planCacheListPlans PlanCache.getPlansByQuery() 使用聚合管道阶段$planCacheStats或使用mongo shell辅助方法 计划缓存列表()。(从版本4.4开始提供)另见 $planCacheStats 变更
planCacheListQueryShapes PlanCache.listQueryShapes() 使用聚合管道阶段$planCacheStats或使用mongo shell辅助方法 计划缓存列表()。(从版本4.4开始提供)另见 $planCacheStats 变更

网络

支持TCP快速打开

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

窗口

  • 以下Windows操作系统支持TFO:

  • Microsoft Windows Server 2016或更高版本。

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

macOS

macOS 10.11(El Capitan)及更高版本支持TFO

Linux

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

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

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

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

MongoDB 4.4添加了以下参数来控制TFO:

参数 描述
tcpFastOpenServer 默认true(已启用)启用或禁用对入站TFO连接的支持mongod/mongos
tcpFastOpenClient 默认true(已启用)仅限Linux操作系统启用或禁用对来自mongod/mongos出站TFO连接的支持。
tcpFastOpenQueueSize 默认1024控制挂起的TFO连接队列的大小。

MongoDB 4.4在serverStatusdb.serverStatus()的输出中添加了以下计数器:

柜台 描述
network.tcpFastOpen.kernelSetting 仅限Linux指示对TFO的内核支持。
network.tcpFastOpen.serverSupported 指示操作系统对传入的TFO连接的支持。
network.tcpFastOpen.clientSupported 指示操作系统对传出TFO连接的支持。
network.tcpFastOpen.accepted 指示自上次开始使用它们/mongos以来,接受的TFO连接到它们/mongod/mongos总数。

对TFO的完整讨论不在本文档的范围之内。有关TFO的更多信息,请从以下外部资源开始:

一般改进

阻止排序限制增加

如果MongoDB无法使用一个或多个索引来获取given cursor.sort()操作的排序顺序,MongoDB必须对数据执行阻塞排序。阻塞排序表示MongoDB在返回结果之前必须消耗和处理该排序的所有输入文档。阻止排序不会阻止集合或数据库上的并发操作。

在MongoDB 4.4之前,如果阻止排序操作需要超过32兆字节的系统内存,MongoDB会返回错误。从MongoDB 4.4开始,阻止排序操作将用于排序操作的系统内存限制提高到100兆字节。对于需要超过100兆字节系统内存的阻止排序操作,MongoDB返回错误,除非查询指定cursor.allowDiskUse()MongoDB 4.4中的新功能)。

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

另见:

find可以使用临时文件来支持大型非索引排序

MongoDB 4.4在find命令中添加了允许DiskUse的新选项。使用 allowDiskUse: true,该操作在处理超过100兆字节内存限制的非索引(“阻止”)排序操作时,可以使用磁盘上的临时文件。在MongoDB 4.4之前,如果具有阻塞排序的find操作在处理排序时超过内存限制,则失败。

对于db.collection.find()外壳方法,使用 cursor.sort(),MongoDB 4.4添加了 allowDiskUse()游标修饰符。

如果MongoDB可以使用索引满足排序,或者阻塞排序需要少于100兆字节的内存,允许DiskUsecursor.allowDiskUse()没有效果。

有关启用允许磁盘的说明,请对通过MongoDB驱动程序发出的查询使用,请遵循您首选的文档MongoDB 4.4兼容驱动程序。

另见:

集合命名空间限制

从MongoDB 4.4开始,

  • 对于设置为"4.4"或更高的功能兼容性版本,MongoDB将未分片集合和视图的限制提高到255字节,将分片集合的限值提高到235字节。对于集合或视图,命名空间包括数据库名称、点(.)分隔符和集合/视图名称(例如<database>.<collection>),
  • 对于设置为"4.2"或更低版本的功能兼容性版本,未分片集合和视图命名空间的最大长度仍然是120字节和100字节。

验证数据吞吐量信息

从MongoDB 4.4版本开始,

另见:

db.collection.validate()参数更改

compact行为改变

阻挡

从MongoDB 4.4开始,compact仅阻止以下元数据操作:

compact不会阻止其当前运行的数据库的MongoDB CRUD操作

以前,compact阻止了它正在运行的数据库的所有操作,包括MongoDB CRUD操作,因此仅适用于在预定维护期间使用。

force选项

从MongoDB 4.4开始,force标志强制使用compact复制集中运行在主场上运行

以前,force选项,当设置为true使compact能够在副本集中主服务器上运行,如果设置为false,则在集上运行时返回错误

另见:

compact

mongod --repair行为改变

从MongoDB4.4开始,mongod --repair会重建所有 以下各项的索引:

  • 集合数据和之间不一致的集合 一个或多个索引。
  • 回收和修改的集合。

在MongoDB的早期版本中,mongod --repair选项 重新生成了所有集合的所有索引。

serverStatus产出变化

字段名称更改

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

新领域img

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

serverStatus分层统计输出变化

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

replSetGetStatus产出变化

replSetGetStatus返回以下新字段:

db.auth()可以提示密码

从MongoDB4.4开始,mongoshell db.auth(<用户名>,<密码>)如果密码的提示 您不能通过密码或passwordPrompt() 方法<密码>

支持视图上的$natural排序

从MongoDB 4.4开始,您可以在对视图运行find操作时指定$natural排序

支持诊断回溯生成

从在Linux上运行的MongoDB 4.4开始:

  • mongodmongos进程收到SIGUSR2信号时,回溯详细信息将添加到每个进程线程的日志中。
  • 回溯详细信息显示了该过程的函数调用,该函数可用于诊断,并在需要时提供给MongoDB支持。

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

  • x86_64
  • arm64(从MongoDB 4.4.15、5.0.10和6.0开始)

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

容器感知FTDC报告

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

更新ulimit启动警告

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

新的replanReason数据库概述器输出字段

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

dbStatscollStats输出

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

适用于其他数据库命令的提示

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

参见:

JavaScript执行mongos

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

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

全局默认读写问题

笔记:

需要功能兼容性版本4.4+

副本集或分片集群中的每个mongod必须featureCompatibilityVersion设置为至少4.4,以配置全局默认读写问题。

从MongoDB 4.4开始,复制集和分片集群支持配置全局默认读写关注设置。没有显式指定给定读或写入问题设置的客户端继承相应的全局默认设置。

为了配置默认全局默认读写问题,MongoDB添加了setDefaultRWConcern管理命令。对于副本集,针对成员发出命令。对于分片集群,从mongos发出命令

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

阅读关注原文

从MongoDB 4.4开始,读取关注对象可能包括aprovenance字段,指示读取关注的起源。

下表显示了可能的阅读关注provenance值及其意义:

描述
clientSupplied 应用程序中指定了读取问题。
customDefault 读取问题源自自定义定义的默认值。请参阅setDefaultRWConcern
implicitDefault 在没有所有其他读取关注规范的情况下,读取问题起源于服务器。

如果记录或配置文件读取操作,则操作条目包含读取关注对象,包括provenance字段。

MongoDB不建议指定对服务器的provenance字段请求。此字段仅用于诊断目的。

写出关注原文

从MongoDB 4.4开始,写入关注对象可能包括aprovenance字段,指示写入关注的起源。

下表显示了可能的写入关注provenance值及其意义:

描述
clientSupplied 写入问题已在应用程序中指定。
customDefault 写入关注源自自定义定义的默认值。请参阅setDefaultRWConcern
getLastErrorDefaults 写入问题起源于副本集的ssettingssettings.getLastErrorDefaults字段。
implicitDefault 写入问题起源于服务器,而没有所有其他写入问题规范。

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

MongoDB不建议指定对服务器的provenance字段请求。此字段仅用于诊断目的。

currentOp输出信息

新的KMIP连接参数mongod

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

连接重试

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

连接超时

要控制超时,以毫秒为单位,等待KMIP服务器的初始响应,然后放弃或重试:

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

新的启动选项mongod

mongod的新processUmask启动选项允许您通过乌马斯克honorSystemUmask设置为false时,对于组和其他用户。

mapReduce忽略verbose选项

从MongoDB 4.4开始,mapReduce命令和 mapReduce()外壳方法忽略 详细选项。

explain支持mapReduce

从MongoDB 4.4开始,您可以使用解释命令 或数据库集合解释()shell方法预览 结果映射减少数据库集合映射减少()

explain结果的改进

从版本4.4开始:

另见:

解释结果。

comment选项适用于所有数据库命令

从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.4,请转到MongoDB下载中心

另见:

所有第三方许可通知

已知问题

在版本中 问题 状态
4.4.0 服务器-45042:面向社区和企业的MongoDB服务器安装MSI不再包含MongoDB数据库工具。有关更多信息,请参阅工具更改。 未解决
4.4.0 服务器-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票据的指导。

译者:韩鹏帅 参见

原文 - Release Notes for MongoDB 4.4

Copyright © 上海锦木信息技术有限公司 all right reserved,powered by Gitbook文件修订时间: 2023-09-01 17:10:26

results matching ""

    No results matching ""