Docs 菜单

Docs 主页开发应用程序MongoDB Manual

setDefaultRWConcern

在此页面上

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

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

该命令具有以下语法:

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

该命令接受以下字段:

字段
类型
说明
setDefaultRWConcern
int

设置为 1

object

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

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

object

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

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

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

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

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

对象

可选。指定由 命令本身使用的 写关注 setDefaultRWConcern的文档。

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

comment
注意到

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

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

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

注意

需要 featureCompatibilityVersion 4.4+

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

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

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

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

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

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

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

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

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

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

重要

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

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

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

  • 这些命令使用的最小 wtimeout60000。仅当全局默认写关注大于 60000 时,这些命令才使用全局默认写关注 wtimeout

对于强制执行Authentication的副本集或分片集群, 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