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

setDefaultRWConcern

在此页面上

  • 定义
  • 兼容性
  • 语法
  • 命令字段
  • 行为
  • 例子
setDefaultRWConcern

setDefaultRWConcern 管理命令为副本集或分片集群设置全局默认读关注或写关注配置。setDefaultRWConcern 必须针对 admin 数据库运行。

  • 对于副本集,请在 主节点 mongod 上发出 setDefaultRWConcern 命令。

  • 对于分片集群,在 mongos 上发出 setDefaultRWConcern 命令。

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

注意

所有 MongoDB Atlas 集群都支持此命令。有关 Atlas 对所有命令的支持的信息,请参阅不支持的命令

该命令具有以下语法:

db.adminCommand(
{
setDefaultRWConcern : 1,
defaultReadConcern: { <read concern> },
defaultWriteConcern: { <write concern> },
writeConcern: { <write concern> },
comment: <any>
}
)

该命令接受以下字段:

字段
类型
说明

int

设置为 1

object

包含全局读关注配置的文档。指定一个有效的读关注对象

省略此文档可保持当前的全局读关注(read concern)不变。如果省略,则setDefaultRWConcern 必须指定 defaultWriteConcern。

object

包含全局默认写关注配置的文档。

  • 对于写关注(write concern)w 设置, 支持除setDefaultRWConcern 之外的所有写关注(write w : 0concern)值。

  • 对于写关注(write concern)wtimeout 设置,如果省略该设置,则setDefaultRWConcern 默认为0 。在满足请求的写关注(write concern)之前,操作处于区块状态。如果指定全局默认wtimeout ,请确保该值足够大,以允许写入操作实现请求的写关注(write concern)。

  • 要取消设置当前配置的写关注,请指定空文档 {}

省略此文档可保持当前的全局写关注(write concern)不变。如果省略,则setDefaultRWConcern 必须指定 defaultReadConcern。

对象

可选。指定由 命令本身使用的写关注(write setDefaultRWConcernconcern)的文档。

如果省略,setDefaultRWConcern 将使用之前设立的全局默认写关注(write concern)(如果已配置)。

comment

any

可选。用户提供的待附加到该命令的注释。设置后,该注释将与该命令的记录一起出现在以下位置:

注释可以是任何有效的 BSON 类型(字符串、整型、对象、数组等)。

setDefaultRWConcern 返回一个包含当前配置的全局默认读关注和写关注的对象。有关返回字段的更完整文档,请参阅 getDefaultRWConcern

注意

需要 featureCompatibilityVersion 4.4+

副本集或分片集群中的每个 mongod 都必须featureCompatibilityVersion 至少设置为 4.4 才能使用 setDefaultRWConcern

从 MongoDB 5.0 开始,只要通过 setDefaultRWConcern 命令设置了集群范围的写关注 (CWWC),就无法取消设置写关注。

MongoDB 仅将全局默认读关注或写关注应用于未显式指定读关注或写关注的操作。

如果 MongoDB 将全局默认的读关注或写关注应用于某个操作,则该操作的行为就像该读关注或写关注是由发出客户端显式指定的一样。

向副本集主成员发出 setDefaultRWConcern。主成员将新的全局默认设置复制到副本集的其余成员。尚未复制已更新全局默认设置的从成员继续使用默认设置的本地“过时”副本。

发出带有写关注 w : "majority"setDefaultRWConcern 命令,以确保命令仅在更改已传播到多数副本集节点后再返回。

向集群中的 mongos 发出 setDefaultRWConcernmongos 将更新后的设置保留在配置服务器副本集 (CSRS) 中。每个 mongos 都会定期向 CSRS 发出 getDefaultRWConcern 命令来刷新其全局设置的本地副本。mongos 在两次刷新之间的时间段内使用全局默认值的本地“过时”副本。

发出 setDefaultRWConcern 命令时指定 writeConcernw : "majority",确保该命令仅在更改已传播到多数 CSRS 节点后才返回。

当应用程序在未明确指定读关注或写关注设置的情况下针对 mongos 执行操作时,mongos 将应用相应的全局默认设置。

全局默认设置不会传播到单个分片。不能对分片运行 setDefaultRWConcern

重要

setDefaultRWConcern 需要 featureCompatibilityVersion 4.4+。如果您将部署的 featureCompatibilityVersion4.4 降级到 4.2,则所有集群范围的读关注和写关注默认设置都将丢失,但是 mongos 实例可能会继续应用默认设置达 30 秒。

配置服务器上执行写入操作的分片管理命令,例如 enableShardingaddShard 命令,使用全局默认写关注设置时具有特定行为:

  • 无论配置何种全局默认写关注,这些命令都使用 "majority"

  • 这些命令使用的最小 wtimeout60000。仅当全局默认写关注大于 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)
}

以下操作将全局默认读关注和写关注设置为:

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.

后退

setParameter