对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

setFeatureCompatibilityVersion(数据库命令)

setFeatureCompatibilityVersion

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

警告

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

升级后,允许部署在不启用向后不兼容功能的情况下运行一段稳定期。仅在确保不太可能降级后才启用这些功能。

此命令可用于以下环境中托管的部署:

在版本8.3中进行了更改。

该命令具有以下语法:

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

setFeatureCompatibilityVersion 命令接受以下字段:

必需

version 的可能值是:

版本
说明

"8.3"

"8.2"

可用于MongoDB 8.2 和MongoDB 8.3部署

从MongoDB 8.3 开始,您可以将FCV从 "8.3" 降级到 "8.2"。

"8.0"

"7.0"

必需

7.0版本新增。

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

如果省略 confirm 参数或将 confirm 设置为 true 以外的值,则该命令将失败并返回有关修改特征兼容性版本的警告。

Optional

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

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

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

注意

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

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

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

Optional

如果设立为 true, MongoDB会模拟特征兼容性版本的升级或降级。如果集群包含不兼容的数据,则操作将失败并显示错误。

8.3版本新增。

如果必须将特征兼容性版本降级到 8.0 以下,则必须先运行 transitionToDedicatedConfigServer 命令。有关降级的详细信息,请参阅降级特征兼容性版本。

如果您尝试升级集群的FCV ,而该集群在升级版本中包含向前不兼容的数据,则会收到 CannotUpgrade 错误。前向不兼容数据可以指集群中依赖于目标版本中已删除功能的任何数据。

出现此错误时,请执行以下任一操作:

  • 修改集群数据以删除向前不兼容的功能,然后使用升级版本重新运行 setFeatureCompatibilityVersion 命令,将FCV设立为升级版本。

  • 使用原始降级版本运行 setFeatureCompatibilityVersion 命令,将FCV设立回原始版本。

    重要

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

    如果FCV升级确认不存在前向不兼容的数据,但因其他原因而停止或失败,则任何后续的FCV降级尝试也会失败,并显示错误消息。您必须先完成FCV升级,然后才能降级FCV。

如果您尝试对降级版本中包含向后不兼容数据的集群的FCV进行降级,则会收到 CannotDowngrade 错误。向后不兼容的数据可以指集群中依赖于目标版本中未提供的功能的任何数据。

出现此错误时,请执行以下任一操作:

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

  • 使用原始升级版本运行 setFeatureCompatibilityVersion 命令,以便将 fCV 重新设置为原始版本。

    重要

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

    如果FCV降级确认不存在向后不兼容的数据,但由于其他原因而停止或失败,则任何后续的FCV升级尝试也会失败,并显示错误消息。您必须先完成FCV降级,然后才能升级FCV。

从 8.3 开始,您可以将部署的FCV降级到之前的次要版本。

要学习;了解更多信息,请参阅将8.3降级至8.2 。

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

重要

从MongoDB 9.0 开始,如果集群中的任何集合正在进行索引构建,setFeatureCompatibilityVersion 会提前失败并显示 BackgroundOperationInProgressForNamespace 错误,并且不会进行任何目录更改。 FCV保持不变。在检查运行后启动的索引构建仍可能导致命令稍后失败。要重试该命令,请先等待索引构建完成或中止索引构建。

如果在初始同步期间更改FCV ,则在 oplog应用程序阶段重放条目时,同步可能会失败并出现 OplogOperationUnsupported 错误。下一次同步会成功,因为操作阶段不再重放操作。

部署
featureCompatibilityVersion

对于新的8.3 部署

"8.3"

对于从 8.2 升级的 8.3 部署

"8.2" 直到您setFeatureCompatibilityVersion 到"8.3" 。

对于新的8.0 部署

"8.0"

对于从 7.0 升级的 8.0 部署

"7.0" 直到您setFeatureCompatibilityVersion 到"8.0" 。

对于新的 7.0 部署

"7.0"

"6.0" 直到您setFeatureCompatibilityVersion 到"7.0" 。

此命令必须对内部系统集合执行写入操作。如果命令未能成功完成,则可安全地重试。该操作是幂等的。

从 MongoDB 6.0 开始,如果需要降级特征兼容性版本,请确保禁用集群到集群复制和用户写入阻止。

  1. 如果您启用了集群到集群复制,请将其禁用。

  2. 如果启用了用户写入阻止,请将其禁用:

    db.runCommand( { setUserWriteBlockMode: 1, global: false } )
  3. 等待上一条命令完成。

有关 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 7.0 不兼容的数据的8.0 功能,请在MongoDB 8.0部署上将功能兼容性设立为 "8.0":

注意

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

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

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

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

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

要禁用保留与MongoDB 7.0 不兼容的数据的8.0 功能,请在MongoDB 8.0部署上将功能兼容性设立为 "7.0":

注意

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

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

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

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

  • "7.0" MongoDB 7.0 和MongoDB 8.0 部署支持 featureCompatibilityVersion。
db.adminCommand(
{
setFeatureCompatibilityVersion: "7.0",
confirm: true
}
)

如果您在从MongoDB 8.0 降级到MongoDB 7.0 的进程中运行此命令,则还必须删除所有与 7.0 不兼容的保留功能。请参阅相应的降级程序。

要启用保留与 MongoDB 6.0 不兼容的数据的 7.0 功能,请在 MongoDB 7.0 部署上将功能兼容性设置为"7.0":

注意

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

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

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

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

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

要禁用保留与 MongoDB 6.0 不兼容的数据的 7.0 功能,请在 MongoDB 7.0 部署上将功能兼容性设置为"6.0":

注意

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

  • 对于独立实例,请在独立 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 不兼容的保留功能。请参阅相应的降级程序。

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

注意

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

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

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

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

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

如果在设置特征兼容性版本后遇到初创企业问题,联系MongoDB支持部门以获取帮助。