文档菜单
文档首页
/
MongoDB 手册
/ / /

setFeatureCompatibilityVersion

本页内容

  • 定义
  • 兼容性
  • 语法
  • 命令字段
  • setFeatureCompatibilityVersion
  • 确认
  • 写关注
  • 行为
  • 使用不兼容数据的降级
  • MongoDB 7.0中的降级策略更改
  • 与后台操作冲突
  • 同步失败
  • 默认值
  • 幂等性
  • 集群间同步和用户写阻塞
  • 仲裁者中的功能兼容性
  • 示例
  • 获取功能兼容性版本
  • 在MongoDB 7.0部署上设置功能兼容性版本
  • 在MongoDB 6.0部署上设置功能兼容性版本
  • 在MongoDB 5.0部署上设置功能兼容性版本
  • 设置写关注超时
setFeatureCompatibilityVersion

启用或禁用与MongoDB早期版本不兼容的数据持久化功能。您只能针对 admin 数据库发出setFeatureCompatibilityVersion

警告

启用向后不兼容的功能可能会使降级过程复杂化,因为您必须在降级之前删除任何已持久化的向后不兼容功能。

建议在升级后,允许您的部署在不启用向后不兼容功能的情况下运行一段时间,以进行烧入,以确保降级的可能性最小。当您确信降级的可能性最小后,再启用这些功能。

此命令可在以下环境中的部署中使用

  • MongoDB Enterprise:基于订阅的自托管MongoDB版本

  • MongoDB Community:开源、免费使用、自托管的MongoDB版本

变更版本7.0.

该命令具有以下语法

db.adminCommand(
{
setFeatureCompatibilityVersion: <version>,
confirm: true,
writeConcern: { wtimeout: <timeout> }
}
)

setFeatureCompatibilityVersion命令接受以下字段

必需

version 的可能值如下

版本
描述
"7.0"

在 MongoDB 7.0 部署上可用

启用 7.0 特性,这些特性与 MongoDB 6.0 不兼容。

"6.0"

在 MongoDB 6.0 和 7.0 部署上可用

启用 6.0 特性,这些特性与 MongoDB 5.0 不兼容。

"5.0"

在 MongoDB 5.0 和 6.0 部署上可用

启用 5.0 特性,这些特性与 MongoDB 4.4 不兼容。

必需

版本7.0.

true 设置为确认功能兼容性更改,并允许操作继续。

如果您省略了 confirm 参数或将 confirm 设置为除 true 以外的任何值,则命令失败并返回有关修改功能兼容性版本的警告。警告指出,在您升级或降级集群的fCV 之后,您无法在没有支持协助的情况下降级二进制版本。

可选

《writeConcern》(写关注)指定了以毫秒为单位的写关注wtimeout

  • 主节点等待副本集大多数成员确认的时间段。如果在指定的时间段内未收到确认,则操作失败。

  • 默认为60000毫秒。如果副本集的从节点延迟超过默认的wtimeout,请使用更长时间段。

注意

  • 对于独立服务器,在独立mongod实例上运行命令。

  • 对于副本集,在主节点上运行命令。必须保证大多数数据承载成员可用。

  • 对于分片集群,在mongos实例上运行命令。

如果您必须将功能兼容版本降级到8.0以下,您必须首先运行transitionToDedicatedConfigServer命令。有关降级详情,请参阅降级功能兼容版本。

如果尝试将包含下载版本中不兼容数据的集群的fCV降级,则会收到CannotDowngrade错误。当出现此错误时,集群将保持在过渡状态的downgrading

要使集群脱离downgrading状态,请执行以下操作之一:

  • 修改集群数据以移除向后不兼容的功能,然后重新运行降级版本的setFeatureCompatibilityVersion命令以设置fCV为降级版本。

  • 使用原始升级版本的setFeatureCompatibilityVersion命令来设置fCV回原始版本。

    重要

    fCV设置为原始版本将停止降级程序,并将fCV恢复到升级版本。此过程不会将集群恢复到fCV降级开始之前的状态。

    如果失败的fCV降级的内部元数据没有被清理,任何随后的fCV升级尝试都会因错误信息而失败。您必须在尝试升级fCV之前完成fCV的降级。

从mongodb 7.0开始,您不能将部署的fCV降级到或从mongodb的快速发布版本。

如果您升级或降级部署的fCV,则无法在不从支持人员获得帮助的情况下降级部署的二进制版本。

有关更多信息,请参阅降级7.0到6.0。

某些后台操作可能会阻止执行setFeatureCompatibilityVersion。使用currentOp来识别任何正在进行的操作。

如果您在初始同步过程中触发了一个 setFeatureCompatibilityVersion 变更,同步可能会在 oplog 应用阶段重新播放条目时失败,并显示一个 OplogOperationUnsupported 错误消息。由于操作阶段不再重新播放操作,因此尝试后的同步将成功。

部署
featureCompatibilityVersion
对于新7.0部署
"7.0"
对于从6.0升级而来的7.0部署
"6.0",直到您将 setFeatureCompatibilityVersion 设置为 "7.0"
对于新6.0部署
"6.0"
对于从5.0升级而来的6.0部署
"5.0",直到您将 setFeatureCompatibilityVersion 设置为 "6.0"
对于新5.0部署
"5.0"
对于从4.4升级而来的5.0部署
"4.4",直到您将 setFeatureCompatibilityVersion 设置为 "5.0"

此命令必须对内部系统集合执行写入操作。如果由于任何原因命令未成功完成,您可以安全地重试该命令,因为该操作是幂等的。

从 MongoDB 6.0 开始,如果您需要降级功能兼容性版本,请确保您已禁用集群间复制和用户写入阻塞。

  1. 如果您启用了集群间复制,请禁用它。

  2. 如果您启用了用户写入阻塞,请禁用它

    db.runCommand( { setUserWriteBlockMode: 1, global: false } )
  3. 等待之前的命令完成。

  4. 使用 setFeatureCompatibilityVersion. 降级功能兼容性版本。

有关 MongoDB 集群间同步的更多信息,请参阅文档。

仲裁者不复制admin.system.version集合。因此,仲裁者的功能兼容性版本始终等于二进制的降级版本,而不管副本集的fCV值是多少。

例如,MongoDB 5.0集群中的一个仲裁者,其fCV值为4.4。

要查看mongod实例的featureCompatibilityVersion,请在mongod实例上运行getParameter命令

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

输出类似于

{
featureCompatibilityVersion: { version: '5.0' },
ok: 1,
'$clusterTime': {
clusterTime: Timestamp({ t: 1660318752, i: 5 }),
signature: {
hash: Binary(Buffer.from("ce0cff3621e9b089fa6d8e9a1e1efc1a1ff15dab", "hex"), 0),
keyId: Long("7129893797260951557")
}
},
operationTime: Timestamp({ t: 1660318752, i: 5 })
}

注意

mongos实例上对操作未定义。

在启用了访问控制的分片集群上,您必须作为分片本地用户连接到分片以运行该命令。

为了启用与MongoDB 6.0不兼容的数据持久化7.0功能,请将MongoDB 7.0部署中的功能兼容性设置为"7.0"

注意

针对admin数据库运行setFeatureCompatibilityVersion命令。

  • 对于独立服务器,在独立mongod实例上运行命令。

  • 对于副本集,在主节点上运行命令。必须保证大多数数据承载成员可用。

  • 对于分片集群,在mongos实例上运行命令。

db.adminCommand(
{
setFeatureCompatibilityVersion: "7.0",
confirm: true
}
)

为了禁用与MongoDB 6.0不兼容的数据持久化7.0功能,请将MongoDB 7.0部署中的功能兼容性设置为"6.0"

注意

针对admin数据库运行setFeatureCompatibilityVersion命令。

  • 对于独立服务器,在独立mongod实例上运行命令。

  • 对于副本集,在主节点上运行命令。必须保证大多数数据承载成员可用。

  • 对于分片集群,在mongos实例上运行命令。

  • "6.0"功能兼容性版本仅在MongoDB 6.0和MongoDB 7.0部署上受支持。

db.adminCommand(
{
setFeatureCompatibilityVersion: "6.0",
confirm: true
}
)

如果在从MongoDB 7.0降级到MongoDB 6.0的过程中运行,您还必须删除所有与6.0不兼容的已持久化功能。请参阅相应的降级流程。

要启用与MongoDB 5.0不兼容的数据的6.0功能,请在MongoDB 6.0部署中将功能兼容性设置为"6.0"

注意

针对admin数据库运行setFeatureCompatibilityVersion命令。

  • 对于独立服务器,在独立mongod实例上运行命令。

  • 对于副本集,在主节点上运行命令。必须保证大多数数据承载成员可用。

  • 对于分片集群,在mongos实例上运行命令。

db.adminCommand( { setFeatureCompatibilityVersion: "6.0" } )

要禁用与MongoDB 5.0不兼容的6.0功能,请在MongoDB 6.0部署中将功能兼容性设置为"5.0"

注意

针对admin数据库运行setFeatureCompatibilityVersion命令。

  • 对于独立服务器,在独立mongod实例上运行命令。

  • 对于副本集,在主节点上运行命令。必须保证大多数数据承载成员可用。

  • 对于分片集群,在mongos实例上运行命令。

  • "5.0"功能兼容性版本仅支持MongoDB 5.0和MongoDB 6.0部署。

db.adminCommand( { setFeatureCompatibilityVersion: "5.0" } )

如果在将MongoDB 6.0降级到MongoDB 5.0的过程中运行,您还必须删除所有与5.0不兼容的已持久化功能。请参阅相应的降级程序。

要启用与MongoDB 4.4不兼容的数据的5.0功能,请在MongoDB 5.0部署中将功能兼容性设置为"5.0"

注意

针对admin数据库运行setFeatureCompatibilityVersion命令。

  • 对于独立服务器,在独立mongod实例上运行命令。

  • 对于副本集,在主节点上运行命令。必须保证大多数数据承载成员可用。

  • 对于分片集群,在mongos实例上运行命令。

db.adminCommand( { setFeatureCompatibilityVersion: "5.0" } )

要禁用与MongoDB 4.4不兼容的数据的5.0功能,请在MongoDB 5.0部署中将功能兼容性设置为"4.4"

注意

针对admin数据库运行setFeatureCompatibilityVersion命令。

  • 对于独立服务器,在独立mongod实例上运行命令。

  • 对于副本集,在主节点上运行命令。必须保证大多数数据承载成员可用。

  • 对于分片集群,在mongos实例上运行命令。

  • "4.4"功能兼容性版本仅在MongoDB 4.4和MongoDB 5.0部署上受支持。

db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )

如果在从MongoDB 5.0到MongoDB 4.4的降级过程中运行,还必须删除所有与4.4不兼容的已持久化功能。请参阅相应的降级程序。

以下示例将可选的写入关注字段 wtimeout 设置为 5000(5 秒)。

注意

针对admin数据库运行setFeatureCompatibilityVersion命令。

  • 对于独立服务器,在独立mongod实例上运行命令。

  • 对于副本集,在主节点上运行命令。必须保证大多数数据承载成员可用。

  • 对于分片集群,在mongos实例上运行命令。

db.adminCommand( {
setFeatureCompatibilityVersion: "5.0",
writeConcern: { wtimeout: 5000 }
} )

返回

setClusterParameter