Docs 菜单

cursor.readPref()

在此页面上

cursor.readPref(mode, tagSet, hedgeOptions)

重要

mongosh 方法

本页面提供 mongosh 方法的相关信息。这不是特定于语言的驱动程序(例如 Node.js)的文档。

如需了解 MongoDB API 驱动程序,请参阅特定语言的 MongoDB 驱动程序文档。

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

注意

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

Parameter
类型
说明

字符串

文档数组

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

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

文档

重要提示:从MongoDB8.0 开始,对冲读已弃用。默认,指定读取偏好(read preference)nearest 的查询不再使用对冲读。如果您明确指定对冲读,则MongoDB会执行对冲读并记录警告。

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

{ enabled: <boolean> }

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

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

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

注意

所有 MongoDB Atlas 集群都支持此命令。有关 Atlas 对所有命令的支持的信息,请参阅不支持的命令

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

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读取偏好必须启用对冲读。

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

  • 没有标签集

    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
    )

在此页面上