setDefaultRWConcern
定义
setDefaultRWConcern
的
setDefaultRWConcern
管理命令设置副本集或分片集群的全局默认读写关注点配置。必须在admin
数据库上运行setDefaultRWConcern
。对于副本集,在主节点
mongod
. 上发出setDefaultRWConcern
命令。对于分片集群,在
mongos
. 上发出setDefaultRWConcern
。
兼容性
此命令可在以下环境中托管的部署中使用
MongoDB Atlas:云中MongoDB部署的全托管服务
注意
此命令在所有MongoDB Atlas集群中都受支持。有关Atlas对所有命令的支持信息,请参阅不受支持的命令。
MongoDB Enterprise:基于订阅的自托管MongoDB版本
MongoDB Community:源代码可用的免费使用、自托管MongoDB版本
语法
命令有以下语法
db.adminCommand( { setDefaultRWConcern : 1, defaultReadConcern: { <read concern> }, defaultWriteConcern: { <write concern> }, writeConcern: { <write concern> }, comment: <any> } )
命令字段
命令接受以下字段
字段 | 类型 | 描述 |
---|---|---|
int | 设置为 | |
object | 包含全局读取关注配置的文档。指定一个有效的 读取关注对象。
省略此文档以保留当前全局读取关注不变。如果省略, | |
object | 包含全局默认写入关注配置的文档。
省略此文档以保留当前全局写入关注不变。如果省略, | |
object | 可选。指定 写入关注 的文档,该写入关注将由 如果省略, | |
comment | any | 可选。附加到此命令的用户提供的注释。一旦设置,此注释将出现在以下位置的记录旁边
注释可以是任何有效的 BSON 类型(字符串、整数、对象、数组等)。 |
setDefaultRWConcern
返回一个包含当前配置的全局默认读写关注点的对象。有关返回字段的更完整文档,请参阅 getDefaultRWConcern
。
行为
从 MongoDB 5.0 开始,一旦通过 setDefaultRWConcern
命令设置了集群范围写关注(CWWC),则无法取消设置写关注。
MongoDB 只将全局默认读写关注点应用于未显式指定读写关注点的操作。
如果 MongoDB 将全局默认读写关注点应用于操作,则该操作的行为就像该读写关注点被发出客户端显式指定一样。
副本集
向副本集的 主节点 发出 setDefaultRWConcern
命令。主节点将新的全局默认设置复制到副本集的其他成员。尚未复制更新后的全局默认设置的从节点将继续使用它们本地的 'stale' 默认副本。
使用带有 setDefaultRWConcern
命令和一个 writeConcern 的 w : "majority"
,以确保命令仅在更改传播到大多数副本集成员后返回。
分片集群
在集群中的 mongos
上执行 setDefaultRWConcern
命令。该 mongos
将更新后的设置持久化到 配置服务器副本集 (CSRS)。每个 mongos
定期向 CSRS 发送 getDefaultRWConcern
命令,以刷新其全局设置的本地副本。在刷新期间,mongos
使用其本地 'stale' 的全局默认副本。
使用带有 writeConcern 的 w : "majority"
的 setDefaultRWConcern
命令,以确保命令仅在更改传播到大多数 CSRS 成员后返回。
当应用程序在未明确指定读取或写入关注设置的情况下对 mongos
执行操作时,mongos
应用相应的全局默认设置。
全局默认设置不会传播到各个分片。您不能在分片上运行 setDefaultRWConcern
。
重要
函数setDefaultRWConcern
需要featureCompatibilityVersion
版本为4.4+
。如果你将部署的featureCompatibilityVersion
从4.4
降级到4.2
,所有集群范围内的读写关注默认值都将丢失,但是mongos
实例可能还会继续应用这些默认值长达30秒。
分片管理命令覆盖写关注设置
对配置服务器执行写操作的分片管理命令,例如enableSharding
或addShard
命令,具有全局默认写关注设置的具体行为
这些命令无论配置的全局默认写关注如何,都使用
"majority"
。这些命令使用最小
wtimeout
为60000
。如果全局默认写关注的wtimeout
大于60000
,则只使用全局默认写关注的wtimeout
。
访问控制
对于强制执行自管理部署的身份验证的副本集或分片集群,setDefaultRWConcern
要求认证用户具有setDefaultRWConcern
操作权限。
内置的clusterManager
角色提供了运行setDefaultRWConcern
所需的权限。
示例
设置全局默认写关注
以下操作将全局写关注设置为以下值
db.adminCommand({ "setDefaultRWConcern" : 1, "defaultWriteConcern" : { "w" : 2 } })
操作返回的文档类似于以下内容
{ "defaultWriteConcern" : { "w" : 2 }, "updateOpTime" : Timestamp(1586290895, 1), "updateWallClockTime" : ISODate("2020-04-07T20:21:41.849Z"), "localUpdateWallClockTime" : ISODate("2020-04-07T20:21:41.862Z"), "ok" : 1, "$clusterTime" : { ... } "operationTime" : Timestamp(1586290925, 1) }
设置全局默认读关注
以下操作将全局读关注设置为"majority"
:
db.adminCommand({ "setDefaultRWConcern" : 1, "defaultReadConcern" : { "level" : "majority" } })
操作返回的文档类似于以下内容
{ "defaultReadConcern" : { "level" : "majority" }, "updateOpTime" : Timestamp(1586290895, 1), "updateWallClockTime" : ISODate("2020-04-07T20:21:41.849Z"), "localUpdateWallClockTime" : ISODate("2020-04-07T20:21:41.862Z"), "ok" : 1, "$clusterTime" : { ... } "operationTime" : Timestamp(1586290925, 1) }
设置全局默认读和写关注
以下操作将全局默认读和写关注设置为以下内容
w: 2
写关注level: "majority"
读关注。
db.adminCommand({ "setDefaultRWConcern" : 1, "defaultWriteConcern" : { "w" : 2 }, "defaultReadConcern" : { "level" : "majority" } })
操作返回的文档类似于以下内容
"defaultWriteConcern" : { "w" : 2 }, "defaultReadConcern" : { "level" : "majority" }
取消全局默认读和写关注
您可以
取消全局默认读关注。
只有在没有设置全局默认写关注的情况下才能取消设置。
例如,假设全局默认读关注设置为 level: "majority"
。要取消全局默认读关注,请使用空文档 {}
db.adminCommand( { "setDefaultRWConcern" : 1, "defaultReadConcern" : {} } )
该操作返回一个文档,表示操作成功
{ defaultReadConcern: { level: 'local' }, defaultWriteConcern: { w: 2, wtimeout: 0 }, updateOpTime: Timestamp({ t: 1656696934, i: 1 }), updateWallClockTime: ISODate("2022-07-01T17:35:40.578Z"), defaultWriteConcernSource: 'global', defaultReadConcernSource: 'implicit', localUpdateWallClockTime: ISODate("2022-07-01T17:35:40.578Z"), ok: 1, '$clusterTime': { ... }, operationTime: Timestamp({ t: 1656632593, i: 1 }) }
您只能在没有设置全局默认写关注的情况下取消设置。
要取消全局默认写关注,请使用空文档 {}
db.adminCommand( { "setDefaultRWConcern" : 1, "defaultWriteConcern" : {} } )
如果全局默认写关注
未设置,则操作成功。
已设置,则操作返回以下错误。
MongoServerError: The global default write concern cannot be unset once it is set.