Docs 菜单

Docs 主页开发应用程序MongoDB Manual

cursor.readPref()

在此页面上

  • 定义
  • 举例
cursor.readPref(mode, tagSet, hedgeOptions)

重要

mongosh 方法

本页介绍了 mongosh方法。这不是特定于语言的驱动程序(例如 Node.js)的文档。

对于 MongoDB API 驱动程序,请参阅特定语言的MongoDB 驱动程序文档。

readPref()附加到游标以控制客户端如何将查询路由到副本集的成员。

注意

从数据库检索任何文档之前,必须对游标应用readPref()

范围
类型
说明
模式
字符串
文档数组

可选。 用于将读取定位到具有指定标签的成员的标签集。 如果使用primarytagSet不可用。

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

文档

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

{ enabled: <boolean> }

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

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

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

readPref()不支持读取偏好的Read Preference maxStalenessSeconds (读取偏好)选项。

以下操作使用读取偏好模式将读取定位到从节点成员。

db.collection.find({ }).readPref( "secondary")

要使用特定标签定位从节点,请同时包含模式tagSet数组:

db.collection.find({ }).readPref(
"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 将使用任何符合条件的从节点。

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

提示

另请参阅:

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

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

  • 没有标签集

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

    db.collection.find({ }).readPref(
    "secondary", // mode
    [ { "datacenter": "B" }, { } ], // tag set
    { enabled: true } // hedge options
    )
← cursor.readConcern()

在此页面上