Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

setFeatureCompatibilityVersion

在此页面上

  • 定义
  • 语法
  • 命令字段
  • setFeatureCompatibilityVersion
  • 确认
  • writeConcern
  • 行为
  • 使用向后不兼容的数据进行降级
  • MongoDB 7.0 中的降级策略变更
  • 与后台操作冲突
  • 同步失败
  • 默认值
  • 幂等
  • Cluster-to-Cluster Sync 和用户写入阻塞
  • 仲裁节点中的功能兼容性
  • 举例
  • 获取 FeatureCompatibilityVersion
  • 在 MongoDB 7.0 部署上设置功能兼容性版本
  • 为 MongoDB 6.0 部署设置特征兼容性版本
  • 在 MongoDB 5.0 部署上设置功能兼容性版本
  • 设置写关注超时
setFeatureCompatibilityVersion

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

警告

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

升级后,建议让部署在不启用向后不兼容功能的情况下稳定运行一段时间,以确保降级回老版本的可能性极小。当确信降级的可能性非常小时,请启用这些功能。

7.0 版本中的更改

该命令具有以下语法:

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

setFeatureCompatibilityVersion 命令接受以下字段:

必需

version 的可能值是:

版本
说明
"7.0"
"6.0"
"5.0"

在 MongoDB 5.0 和 6.0 部署中可用

启用 5.0 功能,这些功能可保留与 MongoDB 4.4 不兼容的数据

必需

7.0 版本中的新增功能

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

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

Optional

writeConcern 以毫秒为单位指定写关注 wtimeout 值:

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

  • 默认值为 60000 毫秒。如果副本集的次要成员的延迟超过 wtimeout 默认值,则使用更长的时间段。

注意

  • 对于独立实例,请在独立 mongod 实例上运行该命令。

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

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

如果尝试降级下载版本中包含不兼容数据的集群的 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"直到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 Cluster-to-Cluster Sync 的更多信息,请参阅文档。

仲裁节点不会复制 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 部署支持 featureCompatibilityVersion。

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 部署支持 featureCompatibilityVersion。

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 部署支持 featureCompatibilityVersion。

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