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版开始:
$planCacheStats
阶段可以在mongos
实例上运行,也可以在mongod
实例上运行。在4.2中,$planCacheStats
阶段只能在mongod
实例上运行。$planCacheStats
包括新字段:主机字段,并且当对mongos运行时,the shard field.Mongo
Shell提供了该方法PlanCache.list()
作为$planCacheStats
聚合阶段。MongoDB删除以下内容:
计划缓存列表计划
和计划缓存列表查询形状
命令,以及计划缓存.getPlansByQuery()
和列表查询形状()
方法。
$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个投票成员。要添加或删除多个投票成员,请执行一系列replSetReconfig
或rs.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
支持以下读取首选项模式:
primary
primaryPreferred
(投票副本集成员的默认)secondary
secondaryPreferred
nearest
(新添加或无投票副本集成员的默认值)
如果副本集已禁用chaining
,则默认initialSyncSourceReadPreference
读取首选项模式为主primary
。
您无法为initialSyncSourceReadPreference
.指定标记集或maxStalenessSeconds。
另见:
镜像读取
从版本4.4开始,MongoDB提供镜像读取来预热可当选次要成员的高速缓存 最近访问的数据。使用镜像读取,主服务器可以 镜像的子集操作它接收和发送它们 到可当选的次级候选人的子集。预热的缓存 辅助服务器有助于在选举后更快地恢复性能。
注意:
主服务器对客户端的响应不受 镜像读取。镜像读取是"即发即弃"操作 由主要负责人;即,主服务器不等待响应 镜像读取。
镜像读取参数
MongoDB 4.4添加了以下镜像读取参数。可以在启动时使用setParameter
配置文件设置或 --setParameter
命令行选项设置参数,也可以在运行时使用setParamete
命令设置参数:
参数 | 说明 |
---|---|
mirrorReads |
指定镜像读取的samplingRate和maxTimeMS设置。 {采样率:, 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
添加了以下新的 默认启动行为:
这种行为可以在 mongos
实例启动或重新启动后更快地为初始客户端连接提供服务。特别是,这允许使用多个 mongos
实例的站点在必要时重新启动它们,或者添加新的实例,而不需要初始客户端请求那些需要等待连接建立的实例。
路由表预加载和连接池预热都已启用 默认情况下。
MongoDB 4.4添加了以下参数来控制此行为:
启动时装入路由表
- 默认值:true(启用)
- 启用或禁用对mongo启动时预加载路由表的支持。
warmMinConnections入切分任务执行器池启动时
- 默认值:true(启用)
- 启用或禁用对mongo启动时连接池预热的支持。
warmMin连接入区任务执行器池启动时等待MS
- 默认值:
2000
(2秒) - 设置客户端连接前的超时(毫秒 到
mongos
都是允许的,无论是否建立 连接池大小。
- 默认值:
改进了路由表更新
执行 movePrimary
或dropDatabase
命令后,不再需要运行flushRouterConfig。这两个命令现在可以在运行时根据需要自动刷新分片集群的路由表。在flushRouterConfig
注意事项中所述的情况下,仍建议手动发出fflushRouterConfig
命令。
复合散列碎片密钥
从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 removeShard
operation is in progress.
碎片键限制
从4.4版本开始,MongoDB取消了碎片键大小的512字节限制。对于MongoDB 4.2及更早版本,碎片键不能超过512字节。
部分结果
从4.4开始,如果find
或随后的getMore
命令因查询的碎片不可用而返回部分结果,则输出包括一个布尔标志 partialResultsReturned
。
巨型块迁移
对于太大而无法迁移的块,从MongoDB 4.4开始:
- 新的平衡器设置
attemptToBalanceJumboChunks
允许平衡器迁移太大而无法移动的块,只要块没有标记为巨型块。有关详细信息,请参阅超过尺寸限制的平衡范围。 moveChunk
命令可以指定一个新的选项forceJumbo,以允许迁移太大而无法移动的块。这些块可能被标记为巨型,也可能不被标记为巨型。
改进的目录缓存刷新
从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 } }
以及点符号。在早期版本中,您只能使用点符号。
有关更多信息,请参阅:
db.collection.find()
db.collection.findOneAndDelete()
db.collection.findOneAndReplace()
db.collection.findOneAndUpdate()
db.collection.findAndModify()
另见:
$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开始,您可以在多文档事务中创建集合和索引,除非该事务是跨分段写入事务。
在事务中创建集合时:
- 您可以隐式创建集合,例如:
- 对不存在的收藏品进行插入操作;
- an update/findAndModify operation with
upsert: true
against a non-existing collection.
- 您可以使用
create
命令或其助手db.createCollection()
显式创建集合。 - 如果对系统集合执行,
db.createCollection()
方法将失败。
在事务中创建索引时:
- 您可以在不存在的集合上创建索引。集合是作为操作的一部分创建的。
- 您可以在同一事务中早些时候创建的新空集合上创建索引。
- 如果对系统集合执行,
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上的系统证书存储
。
另见:
OCSP吻合/必须吻合
作为OCSP支持的一部分,MongoDB 4.4支持以下 Linux操作系统:
OCSP stapling:使用OCSP stapling,
mongod
andmongos
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证书过期警告:
使用MongoDB驱动程序建立TLS连接或执行x.509客户端身份验证的mongo shell或应用程序,证书在30天内到期。(i.e.指定给--tlsCertificateKeyFile或
tlsCertificateKeyFile
的证书)。mongod群集成员正在使用证书执行x.509成员身份验证,证书将在30天内过期。(i.e.指定给
net.tls.clusterFile
,net.tls.clusterCertificateSelector
,mongod --tlsClusterFile
ormongod --tlsClusterCertificateSelector
)。mongos集群成员使用30天内到期的证书执行x.509成员身份验证。(i.e.指定给的证书(即指定给
net.tls.clusterFile
,net.tls.clusterCertificateSelector
,mongos --tlsClusterFile
ormongos --tlsClusterCertificateSelector
的证书)。
警告日志消息如下所示:
<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)映射,则mongod
、mongos
或mongoldap
返回错误。
mongod
、mongos
或mongoldap
拒绝连接请求,并且不检查剩余的映射(如果有的话)。
要指定用户到DN映射,请参阅:
security.ldap.userToDNMapping
mongod --ldapUserToDNMapping
mongos --ldapUserToDNMapping
mongoldap --ldapUserToDNMapping
结构化日志记录
从MongoDB4.4开始, mongod
/ mongos
实例现在输出所有日志消息结构化JSON格式。日志条目作为一个系列写入 键-值对,其中每个键指示日志消息字段类型, 例如"严重性",并且每个对应的值记录了相关联的 记录该字段类型的信息,如"信息"
这包括发送到文件的日志输出、syslog和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。
有关结构化日志记录的更多信息,包括对日志输入组件的详细检查以及命令行解析示例,请参阅日志消息。
多个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数据库工具(mongoimport
、mongoexport
等)。要在Windows上下载和安装MongoDB数据库工具,请参阅安装MongoDB数据库工具。
如果您依赖MongoDB 4.2或之前的MSI安装程序与MongoDB服务器一起安装数据库工具,您现在必须单独下载数据库工具。
驱动器
新驱动程序
- 官方MongoDB Rust驱动程序现在可用。
- 官方MongoDB Swift驱动程序现在可用。
索引
复合散列指数
MongoDB 4.4增加了对使用单散列字段创建复合索引的支持。MongoDB 4.2及更早版本仅支持单字段散列索引。
以下操作在country
_id
上创建一个复合哈希索引:
db.examples.createIndex( { "country" : 1, "_id" : "hashed" } )
复合散列索引需要将特征兼容性版本设置为4.4
。
另见:
隐藏索引
从4.4版本开始,MongoDB增加了从查询规划器中隐藏或取消隐藏索引的功能。隐藏在查询计划器中的索引不会作为查询计划选择的一部分进行评估。
通过向规划者隐藏索引,用户可以评估删除索引的潜在影响,而无需删除索引。如果影响为负数,用户可以取消隐藏索引,而不是重新创建掉落的索引。由于索引在隐藏时得到完全维护,因此隐藏索引一旦未隐藏,即可立即使用。
有关详细信息,请参阅隐藏索引。
为了支持隐藏索引,MongoDB引入了:
- 新的索引选项
隐藏
。该选项可在 以下操作: - 新的
mongo
shell助手方法来隐藏或取消隐藏 现有索引:
dropIndexes
可以中止进行中的索引构建
如果指定为dropIndexes
的索引仍在构建中,dropIndexes
将尝试中止正在进行的构建。中止索引构建与删除构建索引具有相同的效果。在MongoDB 4.4之前,如果集合有任何正在进行的索引构建,dropIndexes
将返回错误。此行为也适用于shell helpersdbdb.collection.dropIndex()
和db.collection.dropIndexes()
。
- 指定给的索引
dropIndexes
/dropIndexes()
必须是完整的 与给定索引生成器关联的正在进行的生成,即 索引由单个创建索引
或创建索引()
操作。 - 指定给
dropIndex()的索引
必须为 与索引构建器相关联的唯一索引,即构建的索引 通过单个createIndexes
或创建索引()
操作。
若要从一组相关的正在进行的生成中删除特定索引, 等待索引生成完成,然后将该索引指定为 dropIndexes
或其外壳帮助器。
有关更完整的文档,请参见:
- Stop In-Progress Index Builds for the
dropIndexes
command. - Stop In-Progress Index Builds for the
dropIndexes()
method. - Stop In-Progress Index Builds for the
dropIndex()
method.
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
或$geoWithin
的2d索引。
移除了命令
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开始,mongod
和mongos
默认支持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在serverStatus
和db.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兆字节的内存,允许DiskUse和cursor.allowDiskUse()
没有效果。
有关启用允许磁盘的说明,请对通过MongoDB驱动程序发出的查询使用,请遵循您首选的文档MongoDB 4.4兼容驱动程序。
另见:
集合命名空间限制
从MongoDB 4.4开始,
- 对于设置为
"4.4"
或更高的功能兼容性版本,MongoDB将未分片集合和视图的限制提高到255字节,将分片集合的限值提高到235字节。对于集合或视图,命名空间包括数据库名称、点(.
)分隔符和集合/视图名称(例如<database>.<collection>
), - 对于设置为
"4.2"
或更低版本的功能兼容性版本,未分片集合和视图命名空间的最大长度仍然是120字节和100字节。
验证数据吞吐量信息
从MongoDB 4.4版本开始,
$currentOp
和currentOp
命令包括dataThroughputAverage
和dataThroughputLastSecond
信息,用于验证正在进行的操作。- 用于验证操作的日志消息包括
dataThroughputAverage
和dataThroughputLastSecond
。
另见:
compact
行为改变
阻挡
从MongoDB 4.4开始,compact
仅阻止以下元数据操作:
db.collection.drop()
db.collection.createIndex()
和db.collection.createIndexes()
db.collection.dropIndex()
和db.collection.dropIndexes()
compact
不会阻止其当前运行的数据库的MongoDB CRUD操作。
以前,compact
阻止了它正在运行的数据库的所有操作,包括MongoDB CRUD操作,因此仅适用于在预定维护期间使用。
force
选项
从MongoDB 4.4开始,force
标志强制使用compact
复制集中运行在主场上运行。
以前,force
选项,当设置为true
使compact
能够在副本集中的主服务器上运行,如果设置为false
,则在主集上运行时返回错误。
另见:
mongod --repair
行为改变
从MongoDB4.4开始,mongod --repair
会重建所有 以下各项的索引:
- 集合数据和之间不一致的集合 一个或多个索引。
- 回收和修改的集合。
在MongoDB的早期版本中,mongod --repair
选项 重新生成了所有集合的所有索引。
serverStatus
产出变化
字段名称更改
serverStatus
返回flowControl.locksPerKiloOp
而不是flowControl.locksPerOp
。
新领域
serverStatus
在其输出中包含以下新字段:
- 汇总指标
metrics.aggStageCounters
(也有4.2.6+和4.0.19+版本)
- 连接指标
- 默认读取关注写入关注度指标
defaultRWConcern
defaultRWConcern.defaultReadConcern
defaultRWConcern.defaultReadConcern.level
defaultRWConcern.defaultWriteConcern
defaultRWConcern.defaultWriteConcern.w
defaultRWConcern.defaultWriteConcern.wtimeout
defaultRWConcern.updateOpTime
defaultRWConcern.updateWallClockTime
defaultRWConcern.localUpdateWallClockTime
metrics.getLastError.default
metrics.getLastError.default.unsatisfiable
metrics.getLastError.default.wtimeouts
- 闩锁指标
- 镜像读取指标
- 查询执行指标
- 复制指标
metrics.repl.network.replSetUpdatePosition.num
metrics.repl.network.getmores.numEmptyBatches
metrics.repl.network.oplogGetMoresProcessed
metrics.repl.network.oplogGetMoresProcessed.num
metrics.repl.network.oplogGetMoresProcessed.totalMillis
metrics.repl.syncSource.numSelections
metrics.repl.syncSource.numTimesChoseSame
metrics.repl.syncSource.numTimesChoseDifferent
metrics.repl.syncSource.numTimesCouldNotFind
- 网络指标
- 安全指标
- 分级指标
serverStatus
分层统计输出变化
shardingStatistics.numHostsTargeted
报告CRUD操作和聚合命令所针对的碎片数量。相关的查找、插入、更新、删除或聚合指标将随着集群上的每个操作而增加。
replSetGetStatus
产出变化
replSetGetStatus
返回以下新字段:
tooStale
votingMembersCount
writableVotingMembersCount
initialSyncStatus.syncSourceUnreachableSince
initialSyncStatus.currentOutageDurationMillis
initialSyncStatus.totalTimeUnreachableMillis
initialSyncAttempts.rollBackId
initialSyncAttempts.operationsRetried
initialSyncAttempts.totalTimeUnreachableMillis
db.auth()可以提示密码
从MongoDB4.4开始,mongo
shell db.auth(<用户名>,<密码>)
如果密码的提示 您不能通过密码或passwordPrompt()
方法<密码>
。
支持视图上的$natural
排序
从MongoDB 4.4开始,您可以在对视图运行find
操作时指定$natural
排序。
支持诊断回溯生成
从在Linux上运行的MongoDB 4.4开始:
回溯功能适用于以下架构:
x86_64
arm64
(从MongoDB 4.4.15、5.0.10和6.0开始)
有关更多信息,请参阅生成回溯。
容器感知FTDC报告
从MongoDB 4.4开始,FTDC现在从容器的角度而不是主机操作系统的角度报告在容器中运行的mongod
的利用率数据。有关更多信息,请参阅全职诊断数据捕获。
更新ulimit
启动警告
从MongoDB 4.4开始,如果平台对打开文件数量的配置ulimit
值低于64000
,mongod
将记录启动警告。以前,只有当此值低于1000
时,才会记录警告。有关更多信息,请参阅推荐的ulimit
设置。
新的replanReason
数据库概述器输出字段
MongoDB 4.4将replanReason
字段添加到数据库分析器输出和诊断日志消息中。replanReason
字段包含查询系统驱逐缓存计划的原因。
dbStats
和collStats
输出
dbStats
命令及其mongo shell助手 db.stats()
返回:
totalSize
,它是storageSize
和indexSize
之和。collStats
命令及其mongo shell助手db.collection.stats()
和$collStats
聚合阶段返回:totalSize
,它是storageSize
与totalIndexSize
之和。freeStorageSize
,这是可供重用的存储量。
适用于其他数据库命令的提示
从MongoDB 4.4开始,以下数据库命令可以接受hint
参数来指定要使用的索引:
delete
命令和相关的mongo shell方法db.collection.deleteOne()
和db.collection.deleteMany()
。findAndModify
命令和相关的mongo shell方法:
参见:
JavaScript执行mongos
从MongoDB 4.4开始,MongoDB允许JavaScript执行onmongos实例。要在mongos
实例上禁用JavaScript执行:
- 将
security.javascriptEnabled
配置选项设置为false,或 - 指定
--noscripting
命令行选项。
早期版本的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
输出信息
- 在报告正在进行的验证操作时,
$currentOp
包括dataThroughputAverage
和dataThroughputLastSecond
信息。 currentOp
命令在报告正在进行的验证操作时包括dataThroughputAverage
和dataThroughputLastSecond
信息。
新的KMIP连接参数mongod
MongoDB 4.4 Enterprise引入了两个新的配置设置,以增强与KMIP服务器的初始连接,作为Kerberos身份验证的一部分:
连接重试
要控制mongod
重试与KMIP服务器的初始连接失败的次数:
- 设置
security.kmip.connectRetries
配置选项,或 - 指定
mongod --kmipConnectRetries
命令行选项。
连接超时
要控制超时,以毫秒为单位,等待KMIP服务器的初始响应,然后放弃或重试:
- 设置
security.kmip.connectTimeoutMS
配置选项,或 - 指定
mongod --kmipConnectTimeoutMS
命令行选项。
这些设置仅在MongoDB Enterprise中可用。
新的启动选项mongod
mongod
的新processUmask
启动选项允许您通过乌马斯克当honorSystemUmask
设置为false
时,对于组和其他用户。
mapReduce
忽略verbose
选项
从MongoDB 4.4开始,mapReduce
命令和 mapReduce()
外壳方法忽略 详细选项。
explain
支持mapReduce
从MongoDB 4.4开始,您可以使用解释
命令 或数据库集合解释()
shell方法预览 结果映射减少
或 数据库集合映射减少()
。
explain
结果的改进
从版本4.4开始:
- 解释在碎片集群上运行的命令的结果,除了为每个碎片返回的
serverInfo
外,还包括mongos
顶级serverInfo对象。这也适用于4.2.2、4.0.14和3.6.16版本。 - 解释当
optimizedPipeline
为真时,结果包括serverInfo对象。在MongoDB的早期版本中,当optimizedPipeline为true时,解释结果偶尔会不包括serverInfo对象。这在版本4.2.2、4.0.14和3.6.16中也可用。 - 当您在
executionStats
和allPlansExecution
模式下运行db.collection.explain().aggregate()
方法时,解释聚合结果包括每个管道阶段的nReturned
和executionTimeMillisEstimate
字段。
另见:
comment
选项适用于所有数据库命令
从MongoDB 4.4开始,所有数据库命令都支持以以下方式指定comment
字段:
db.runCommand( { <command> , "comment" : <any BSON type> })
设置后,注释将与以下位置的命令记录一起显示:
- mongod日志消息,在
attr.command.cursor.comment
字段中。 - 数据库分析器输出,在
command.comment
字段中。 currentOp
输出,在command.comment
字段中。
注释必须是有效的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票据的指导。
译者:韩鹏帅 参见