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

setDefaultRWConcern(数据库命令)

setDefaultRWConcern

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

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

该命令具有以下语法:

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

该命令接受以下字段:

字段
类型
说明

int

设置为 1

object

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

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

object

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

  • For the write concern w setting, setDefaultRWConcern supports all write concern values except w : 0.

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

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

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

对象

Optional. A document that specifies the write concern to be used by the setDefaultRWConcern command itself.

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

comment

any

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

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

setDefaultRWConcern returns an object that contains the currently configured global default read and write concern. See getDefaultRWConcern for more complete documentation on the returned fields.

注意

需要 featureCompatibilityVersion 4.4+

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

从MongoDB5.0 开始,一旦通过 命令设立了集群范围的写关注(writesetDefaultRWConcern concern)关注 (CWWC),就无法取消设置。

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

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

针对副本集主节点setDefaultRWConcern (primary node in the replica set)节点发出 。主节点 (primary node in the replica set)将新的全局默认设置复制到副本集的其余节点。尚未复制更新的全局默认设置的从节点继续使用默认值的本地“过时”副本。

发出setDefaultRWConcern 命令(writeConcernw : "majority" ),确保该命令仅在更改传播到大多数副本集成员后返回。

针对集群中的setDefaultRWConcern mongos发出 mongos将更新的设置保留到配置服务器副本集(CSRS)。每个 都会定期针对 getDefaultRWConcernCSRS mongosmongos发出 ,以刷新全局设置的本地副本。 在两次刷新之间的时间段内使用全局默认值的本地“过时”副本。

Issue the setDefaultRWConcern command with a writeConcern of w : "majority" to ensure the command only returns after the changes have propagated to a majority of CSRS members.

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

全局默认设置不会传播到各个分片。您无法对分片运行setDefaultRWConcern

重要

setDefaultRWConcern需要 featureCompatibilityVersion4.4+ 。如果您将部署的 featureCompatibilityVersion4.4 降级为4.2 ,则所有集群范围的读关注和写关注(write concern)默认值都将丢失,但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.