Docs 菜单
Docs 主页
/
MongoDB Manual
/

默认 MongoDB 读关注/写关注

在此页面上

  • 读关注 (read concern)
  • 写关注
  • 因果一致性保证
读/写关注继承
点击放大

默认读关注(read concern)如下:

操作
默认读关注

读取主节点

Reads against secondaries.

"local"

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

  • 这种读关注并不能保证因果一致性

以下信息适用于在事务外部运行的操作。有关与事务内部运行的操作相关的读关注(read concern)信息,请单击 Operations in Transactions标签页。

使用 MongoDB驱动程序,您可以覆盖默认的读关注(read concern)并为以下级别的操作设立读关注(read concern):

等级
说明

客户端级别

适用于操作,除非在数据库/集合/操作级别为操作设置了更精细的读关注。

数据库级别

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

不适用于事务内部的操作。

集合级别

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

不适用于事务内部的操作。

操作级别

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

能否在操作中设置读关注取决于驱动程序。请参阅驱动程序文件

不适用于事务内部的操作。

以下信息适用于在事务内部运行的操作。有关与在事务外部运行的操作相关的读关注(read concern)信息,请单击Operations outside Transactions 标签页。

使用MongoDB驱动程序,您可以覆盖默认的读关注(read concern)并为以下级别的事务设立读关注(read concern):

等级
说明

客户端级别

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

事务中的所有操作都使用ACID 事务读关注(read concern):在操作、集合或数据库级别设立的任何读关注(read concern)在ACID 事务ACID 事务都会被忽略。

会话级别

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

事务中的所有操作都使用ACID 事务读关注(read concern):在操作、集合或数据库级别设立的任何读关注(read concern)在ACID 事务ACID 事务都会被忽略。

有关详细信息,请参阅事务和读关注

事务级别

适用于具体事务(即覆盖客户端/会话读关注)。

事务中的所有操作都使用ACID 事务读关注(read concern):在操作、集合或数据库级别设立的任何读关注(read concern)在ACID 事务ACID 事务都会被忽略。

有关详细信息,请参阅事务和读关注

有关可用都关注的更多信息,请参阅读关注

读/写关注继承
点击放大

从 MongoDB 5.0 开始,隐式默认写关注w: majority。但是,对于包含仲裁节点的部署,需要特别考虑以下事项:

  • 副本集的投票多数是 1 加投票成员数量的一半,四舍五入。如果数据承载投票成员的数量不超过投票多数,则默认写关注为 { w: 1 }

  • 在所有其他场景中,默认写关注为 { w: "majority" }

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

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

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

Non-Arbiters
仲裁节点
投票节点
多数投票节点
隐式默认写关注

2

1

3

2

{ w: 1 }

4

1

5

3

{ w: "majority" }

  • 在第一个示例中:

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

    • 多数投票节点(1 加 3 的一半,四舍五入)为 2。

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

  • 在第二个示例中:

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

    • 多数投票节点(1 加 5 的一半,四舍五入)为 3。

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

以下信息适用于在事务外部运行的操作。有关与事务内部运行的操作相关的读关注(read concern)信息,请单击 Operations in Transactions标签页。

使用 MongoDB 驱动程序,您可以覆盖默认写关注,并在以下级别为操作设置写关注:

等级
说明

客户端级别

适用于操作,除非在操作/数据库/集合级别为操作设置了更精细的写关注。

数据库级别

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

不适用于事务内部的操作。

集合级别

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

不适用于事务内部的操作。

操作级别

适用于特定的写入操作。

能否在操作中设置写关注取决于驱动程序。请参阅驱动程序文件

不适用于事务内部的操作。

以下信息适用于在事务内部运行的操作。有关与在事务外部运行的操作相关的读关注(read concern)信息,请单击Operations outside Transactions 标签页。

使用 MongoDB 驱动程序,您可以覆盖默认写关注,并在以下级别为事务设置写关注:

等级
说明

客户端级别

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

事务写关注适用于提交操作和事务内的操作。

事务中的所有操作都使用ACID 事务写关注(write concern):在操作、集合或数据库级别设立的任何写关注(write concern)在ACID 事务ACID 事务都会被忽略。

会话级别

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

事务写关注适用于提交操作和事务内的操作。

事务中的所有操作都使用ACID 事务写关注(write concern):在操作、集合或数据库级别设立的任何写关注(write concern)在ACID 事务ACID 事务都会被忽略。

事务级别

适用于特定ACID 事务。

事务写关注适用于提交操作和事务内的操作。

事务中的所有操作都使用ACID 事务写关注(write concern):在操作、集合或数据库级别设立的任何写关注(write concern)在ACID 事务ACID 事务都会被忽略。

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

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

使用因果一致的客户端会话时,只有在以下情况下,客户端会话才能保证因果一致性:

  • 关联的读取操作使用 "majority" 读关注,而

  • 关联的写入操作使用 "majority" 写关注。

后退

默认端口