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

默认MongoDB读关注点/写关注点

本页内容

  • 读关注点
  • 写关注点
  • 因果一致性保证
Read/Write Concern Inheritance
点击放大

默认 读关注点如下

操作
默认读关注点
对主节点进行读取
对副本节点进行读取。

"local"

  • 此读关注点可能返回可能回滚的数据。

  • 此读关注点不能保证因果一致性

以下信息适用于运行在事务之外的操作。有关运行在事务内部的操作的读取关注度信息,请点击“事务内操作”标签页。

使用MongoDB 驱动,您可以覆盖默认的读取关注度,并为以下级别的操作设置读取关注度

级别
描述
客户端级别
适用于操作,除非在数据库/集合/操作级别设置了更精细的读取关注度。
数据库级别

适用于数据库集合上的操作(即覆盖客户端读取关注度),除非在集合级别或操作级别设置了读取关注度。

不适用于事务内的操作。

集合级别

适用于集合上的读取操作(即覆盖数据库/客户端读取关注度),除非在操作级别设置了读取关注度。

不适用于事务内的操作。

操作级别

适用于特定的读取操作(即覆盖数据库/客户端/集合读取关注度)。

在操作级别设置读取关注度的能力取决于驱动程序。请参阅您的驱动程序文档

不适用于事务内的操作。

以下信息适用于运行在事务内的操作。有关运行在事务之外的操作的读取关注度信息,请点击“事务外操作”标签页。

使用MongoDB 驱动,您可以覆盖默认的读取关注度,并为以下级别的事务设置读取关注度

级别
描述
客户端级别

适用于事务,除非在会话/事务级别设置了更精细的读取关注度。

事务内的所有操作都使用事务读取关注度:任何在操作、集合或数据库级别设置的读取关注度在事务内部都将被忽略

会话级别

适用于会话中启动的事务(即覆盖客户端读取关注度),除非在特定事务级别设置了更精细的读取关注度级别。

事务内的所有操作都使用事务读取关注度:任何在操作、集合或数据库级别设置的读取关注度在事务内部都将被忽略

有关更多信息,请参阅事务和读取关注度

事务级别

适用于特定的事务(即覆盖客户端/会话读取关注度)。

事务内的所有操作都使用事务读取关注度:任何在操作、集合或数据库级别设置的读取关注度在事务内部都将被忽略

有关更多信息,请参阅事务和读取关注度

有关可用的读取关注点的更多信息,请参阅读取关注点。

Read/Write Concern Inheritance
点击放大

从MongoDB 5.0开始,隐式默认写入关注点w: majority。但是,对于包含仲裁者的部署,需要特殊考虑:

  • 副本集的投票多数是投票成员数加半数,向下取整。如果数据承载的投票成员数不大于投票多数,则默认写入关注点是{ w: 1 }

  • 在其他所有情况下,默认的写入关注点是 { w: "majority" }

具体来说,MongoDB 使用以下公式来确定默认的写入关注点

if [ (#arbiters > 0) AND (#non-arbiters <= majority(#voting-nodes)) ]
defaultWriteConcern = { w: 1 }
else
defaultWriteConcern = { w: "majority" }

例如,考虑以下部署及其各自的默认写入关注点

非仲裁者
仲裁者
投票节点
投票节点中的大多数
隐式默认写入关注点
2
1
3
2
{ w: 1 }
4
1
5
3
{ w: "majority" }
  • 在第一个例子中

    • 有2个非仲裁者和1个仲裁者,总共3个投票节点。

    • 投票节点中的大多数(1加上3的一半,向下取整)是2。

    • 非仲裁者的数量(2)等于投票节点中的大多数(2),导致隐式写入关注点为 { w: 1 }

  • 在第二个例子中

    • 有4个非仲裁者和1个仲裁者,总共5个投票节点。

    • 投票节点中的大多数(1加上5的一半,向下取整)是3。

    • 非仲裁者的数量(4)大于投票节点中的大多数(3),导致隐式写入关注点为 { w: "majority" }

以下信息适用于运行在事务之外的操作。有关运行在事务内部的操作的读取关注度信息,请点击“事务内操作”标签页。

使用 MongoDB 驱动,您可以覆盖默认的 写入关注点 并设置以下级别的写入关注点

级别
描述
客户端级别
适用于操作,除非在操作/数据库/集合处设置了更细粒度的写入关注点。
数据库级别

适用于数据库集合上的写入操作(即覆盖客户端写入关注点),除非在集合级别或操作级别设置了写入关注点。

不适用于事务内的操作。

集合级别

适用于集合上的写入操作(即覆盖数据库和客户端写入关注点),除非在操作级别设置了写入关注点。

不适用于事务内的操作。

操作级别

适用于特定的写入操作。

在操作级别设置写入关注点的功能取决于驱动。请参阅您的 驱动文档

不适用于事务内的操作。

以下信息适用于运行在事务内的操作。有关运行在事务之外的操作的读取关注度信息,请点击“事务外操作”标签页。

使用 MongoDB 驱动,您可以覆盖默认的 写入关注点 并设置以下级别的 事务 写入关注点

级别
描述
客户端级别

适用于事务,除非在会话/事务级别设置了更细粒度的事务写入关注点。

事务写入关注点适用于提交操作以及事务内的操作。

事务内的所有操作都使用事务写入关注点:在操作、集合或数据库级别设置的任何写入关注点,在事务内都会被忽略

会话级别

除非在特定事务级别设置写入关注点级别,否则适用于会话中启动的事务。

事务写入关注点适用于提交操作以及事务内的操作。

事务内的所有操作都使用事务写入关注点:在操作、集合或数据库级别设置的任何写入关注点,在事务内都会被忽略

事务级别

适用于特定事务。

事务写入关注点适用于提交操作以及事务内的操作。

事务内的所有操作都使用事务写入关注点:在操作、集合或数据库级别设置的任何写入关注点,在事务内都会被忽略

有关更多信息,请参阅事务和写入关注点

有关可用写入关注点的更多信息,请参阅写入关注点

因果一致性的客户端会话中,只有当

  • 相关读取操作使用"majority"读取关注点,并且

  • 相关写入操作使用"majority"写入关注点时,客户端会话才保证因果一致性。

返回

默认端口