Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

Mongo.setReadPref()

在此页面上

  • 定义
  • 兼容性
  • 行为
  • 示例
Mongo.setReadPref(mode, tagSet, hedgeOptions)

setReadPref()Mongo 连接对象上调用 方法,可控制客户端如何将所有查询路由到副本集的成员。 [1 ]

注意

在使用该连接检索文档之前,必须对连接对象调用 Mongo.setReadPref() 才能使用该读取偏好。

[1] 要对一个或多个特定查询应用读取偏好,可以在迭代之前对游标应用 cursor.readPref()。请参阅 cursor.readPref() 了解详细信息。
Parameter
类型
说明

字符串

以下读取偏好(read preference)模式之一: primaryprimaryPreferredsecondarysecondaryPreferrednearest

文档数组

可选。标签集,用于将读数定向到带有指定标签的成员。如果使用读取偏好模式 primary,则 tagSet 不可用。

有关详细信息,请参阅读取偏好(read preference)标签集列表。

文档

可选。指定是否启用对冲读的文档:

{ enabled: <boolean> }

enabled字段默认为 true;即指定空文档{ }相当于指定{ enabled: true }

对冲读可用于分片集群。要使用对冲读,mongos 必须有 enabled support 用于对冲读(默认值),非 primary 读取偏好必须启用对冲读。

默认情况下,读取偏好(read preference)nearest允许在分片集群上使用对冲读;即默认情况下具有{ enabled: true }

Mongo.setReadPref() 不支持读取偏好的读取偏好 maxStalenessSeconds 选项。

此方法可用于以下环境中托管的部署:

  • MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务

Mongo.setReadPref() 有以下行为。

从 mongosh 2.0 开始,db.runCommand() 会忽略通过连接字符串或使用 Mongo.setReadPref() 方法添加的任何全局读取偏好。要指定所需的读取偏好,在调用 db.runCommand() 时使用 options 参数。

以下操作将读取偏好模式设置为将针对辅助节点成员进行读取。这隐式允许从辅助节点读取。

db.getMongo().setReadPref('secondary')

但是,如果在使用 mongo shell 连接到主节点时调用上述命令,则上述命令不会将查询路由到从节点。

要以特定标签定位从节点,请包含模式tagSet 数组:

db.getMongo().setReadPref(
"secondary",
[
{ "datacenter": "B" }, // First, try matching by the datacenter tag
{ "region": "West"}, // If not found, then try matching by the region tag
{ } // If not found, then use the empty document to match all eligible members
]
)

在从节点选择过程中,MongoDB 会尝试首先找到带有datacenter: "B"标签的从节点。

  • 如果找到,MongoDB 会将符合条件的从节点限制为带有datacenter: "B"标签的从节点,并忽略其余标签。

  • 如果未找到,MongoDB 会尝试查找带有"region": "West"标签的从节点。

    • 如果找到,MongoDB 会将符合条件的从节点限制为带有"region": "West"标签的从节点。

    • 如果未找到,MongoDB 将使用任何符合条件的从节点。

有关详细信息,请参阅标签匹配顺序

提示

另请参阅:

对于分片集群,您可以为非主节点读取偏好启用对冲读。要使用对冲读,mongos 必须有 enabled support 用于对冲读(默认值),非 primary 读取偏好必须启用对冲读。

要使用对冲读来定位分片集群上的从节点,请同时包含模式对冲选项,如下例所示:

  • 没有标签集

    db.getMongo().setReadPref(
    "secondary", // mode
    null, // tag set
    { enabled: true } // hedge options
    )
  • 有标签集

    db.getMongo().setReadPref(
    "secondary", // mode
    [ { "datacenter": "B" }, { } ], // tag set
    { enabled: true } // hedge options
    )

后退

Mongo.setCausalConsistency