文档菜单
文档首页
/
MongoDB 手册
/ / /

setDefaultRWConcern

本页

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

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

  • 对于副本集,在主节点 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

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

省略此文档以保留当前全局读取关注不变。如果省略,setDefaultRWConcern 必须指定 默认写入关注。

object

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

  • 对于写入关注 w 设置,setDefaultRWConcern 支持所有写入关注值 除了 w : 0

  • 对于写入关注 wtimeout 设置,setDefaultRWConcern 在省略设置时默认为 0。操作将阻塞,直到满足请求的写入关注。如果指定全局默认 wtimeout,请确保值足够大,以便写入操作能够实现所需的写入关注。

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

省略此文档以保留当前全局写入关注不变。如果省略,setDefaultRWConcern 必须指定 默认读取关注。

object

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

如果省略,setDefaultRWConcern 将使用先前设置的全球默认写入关注 如果 已配置。

comment
any

可选。附加到此命令的用户提供的注释。一旦设置,此注释将出现在以下位置的记录旁边

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

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

注意

需要功能兼容性版本 4.4+

副本集或分片集群中的每个 mongod 必须将 功能兼容性版本 设置为至少 4.4 才能使用 setDefaultRWConcern

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

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

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

向副本集的 主节点 发出 setDefaultRWConcern 命令。主节点将新的全局默认设置复制到副本集的其他成员。尚未复制更新后的全局默认设置的从节点将继续使用它们本地的 'stale' 默认副本。

使用带有 setDefaultRWConcern 命令和一个 writeConcernw : "majority",以确保命令仅在更改传播到大多数副本集成员后返回。

在集群中的 mongos 上执行 setDefaultRWConcern 命令。该 mongos 将更新后的设置持久化到 配置服务器副本集 (CSRS)。每个 mongos 定期向 CSRS 发送 getDefaultRWConcern 命令,以刷新其全局设置的本地副本。在刷新期间,mongos 使用其本地 'stale' 的全局默认副本。

使用带有 writeConcernw : "majority"setDefaultRWConcern 命令,以确保命令仅在更改传播到大多数 CSRS 成员后返回。

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

全局默认设置不会传播到各个分片。您不能在分片上运行 setDefaultRWConcern

重要

函数setDefaultRWConcern需要featureCompatibilityVersion版本为4.4+。如果你将部署的featureCompatibilityVersion4.4降级到4.2,所有集群范围内的读写关注默认值都将丢失,但是mongos实例可能还会继续应用这些默认值长达30秒。

配置服务器执行写操作的分片管理命令,例如enableShardingaddShard命令,具有全局默认写关注设置的具体行为

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

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

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

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