定义
- cursor.readPref(mode, tagSet, hedgeOptions)
- 重要- mongosh 方法- 本页面提供 - mongosh方法的相关信息。这不是 特定于语言的驱动程序(例如 Node.js)的文档。- 如需了解 MongoDB API 驱动程序,请参阅特定语言的 MongoDB 驱动程序文档。 - 将 - readPref()附加到游标以控制客户端如何将查询路由到副本集的成员。- 注意- 在从数据库检索任何文档之前,必须对游标应用 - readPref()。
参数
| Parameter | 类型 | 说明 | 
|---|---|---|
| 字符串 | ||
| 文档数组 | 可选。 用于将读取定位到具有指定标签的成员的标签集。 如果使用 有关详细信息,请参阅读取偏好(read preference)标签集列表。 | |
| 文档 | 可选。 指定是否启用对冲读的文档。 
 
 对冲读可用于分片集群。要使用对冲读, 默认情况下,读取偏好(read preference) | 
readPref() 不支持读取偏好的读取偏好 maxStalenessSeconds 选项。
兼容性
此方法可用于以下环境中托管的部署:
- MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务 
注意
所有 MongoDB Atlas 集群都支持此命令。有关 Atlas 对所有命令的支持的信息,请参阅不支持的命令。
- MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本 
- MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本 
示例
指定读取偏好(read preference)模式
以下操作使用读取偏好模式将读取定位到从节点成员。
db.collection.find({ }).readPref( "secondary") 
指定读取偏好标签集
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 将使用任何符合条件的从节点。 
 
有关详细信息,请参阅标签匹配顺序。
提示
指定对冲读
对于分片集群,您可以为非主节点读取偏好启用对冲读。要使用对冲读,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 - )