定义
- setFeatureCompatibilityVersion
- 启用或禁用将与早期版本 MongoDB 不兼容的数据持久化的功能。您只能对 - admin数据库发出- setFeatureCompatibilityVersion。
警告
启用向后不兼容的功能可能会使降级过程变得复杂,因为在降级之前,您必须删除任何持续存在的向后不兼容的功能。
升级后,建议让部署在不启用向后不兼容功能的情况下稳定运行一段时间,以确保降级回老版本的可能性极小。当确信降级的可能性非常小时,请启用这些功能。
兼容性
此命令可用于以下环境中托管的部署:
- MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本 
- MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本 
语法
该命令采用以下形式:
db.adminCommand( {    setFeatureCompatibilityVersion: <version>,    writeConcern: { wtimeout: <timeout> } } ) 
version的值为:
| 版本 | 说明 | 
|---|---|
| 
 | 可用于 MongoDB 5.0 部署 | 
| 
 | 在 MongoDB 4.4 和 5.0 部署中可用 启用保留与MongoDB 4.2不兼容的数据的4.4功能。 | 
| 
 | 在 MongoDB 4.4 部署中可用 禁用保留与MongoDB 4.2不兼容的数据的4.4功能。 | 
writeConcern
Optional
writeConcern 以毫秒为单位指定写关注 wtimeout 值:
行为
与后台操作冲突
某些后台操作可能会阻止 setFeatureCompatibilityVersion 的执行。使用 currentOp 确定任何正在进行的操作。
同步失败
如果在初始同步过程中触发 setFeatureCompatibilityVersion 更改,在 oplog 应用阶段重放条目时,同步可能会失败,并显示 OplogOperationUnsupported 错误信息。此尝试之后的同步会成功,因为操作阶段不再重放该操作。
Default Values
| 部署 | featureCompatibilityVersion | 
|---|---|
| 新的 5.0 部署 | 
 | 
| 对于从 4.4 升级的 5.0 部署 | 
 | 
幂等
此命令执行的必须是对内部系统集合的写入。如果由于任何原因该命令未能成功完成,您都可以安全地重试该命令,因为该操作是幂等的。
仲裁节点中的功能兼容性
仲裁节点不会复制 admin.system.version 集合。因此,无论副本集的 fCV 值如何,仲裁节点始终具有等于二进制文件的降级版本的特征兼容性版本。
例如,MongoDB 5.0 集群中的仲裁节点的 fCV 值为 4.4。
示例
查看 FeatureCompatibilityVersion
要查看mongod实例的featureCompatibilityVersion ,请对mongod实例运行以下命令:
注意
该操作在mongos实例上未定义。 对于已启用访问控制的分片集群,要对分片副本集的成员运行命令,必须以分片本地用户身份连接到该成员。
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } ) 
此命令的输出将类似于以下内容之一,具体取决于mongod的当前状态:
- 如果部署具有默认 - featureCompatibilityVersion,或者已针对部署成功运行- setFeatureCompatibilityVersion命令,则- featureCompatibilityVersion的形式为:- "featureCompatibilityVersion" : { - "version" : <version> - } 
- 如果 - mongod处于部分升级或降级状态,则- featureCompatibilityVersion将采用以下形式:- "featureCompatibilityVersion" : { - "version" : <version> , - "targetVersion" : <target version> - } - 例如,如果分片集群有一个分片副本集,而当您针对 运行 - setFeatureCompatibilityVersion- mongos命令时,该副本集为只读,则该命令将失败,并且配置服务器的- featureCompatibilityVersion将包含- targetVersion字段。- 或者,如果在 - setFeatureCompatibilityVersion运行时副本集变为只读,则该命令将失败,并且副本集的- featureCompatibilityVersion也将包含- targetVersion字段。
在 MongoDB 5.0 部署上设置功能兼容性版本
启用 5.0 向后不兼容的功能
要启用保留与 MongoDB 4.4 不兼容的数据的 5.0 功能,请在 MongoDB 5.0 部署上将功能兼容性设置为"5.0":
注意
对 admin 数据库运行 setFeatureCompatibilityVersion 命令。
db.adminCommand( { setFeatureCompatibilityVersion: "5.0" } ) 
禁用 5.0 向后不兼容的功能
要禁用保留与 MongoDB 4.4 不兼容的数据的 5.0 功能,请在 MongoDB 5.0 部署上将功能兼容性设置为 "4.4":
注意
对 admin 数据库运行 setFeatureCompatibilityVersion 命令。
- "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 命令。
db.adminCommand( {    setFeatureCompatibilityVersion: "5.0",    writeConcern: { wtimeout: 5000 } } )