Docs 主页 → 开发应用程序 → MongoDB Manual
Mongo.setReadPref()
定义
Mongo.setReadPref(mode, tagSet, hedgeOptions)
在
setReadPref()
Mongo
连接对象上调用 方法,以控制客户端如何将所有查询路由到副本集的节点。 [1 ]注意
在使用该连接检索文档之前,您必须对连接对象调用
Mongo.setReadPref()
,才能使用该读取偏好。
[1] | 要对一个或多个特定查询应用读取偏好,可以在迭代之前对游标应用 cursor.readPref() 。请参阅 cursor.readPref() 了解详细信息。 |
参数
范围 | 类型 | 说明 |
---|---|---|
字符串 | ||
文档数组 | 可选。标签集,用于将读数定向到带有指定标签的成员。如果使用读取偏好模式 有关详细信息,请参阅读取偏好(read preference)标签集列表。 | |
文档 | 可选。指定是否启用对冲读的文档:
对冲读可用于分片集群。要使用对冲读, 默认情况下,读取偏好(read preference) |
Mongo.setReadPref()
不支持读取偏好的Read Preference maxStalenessSeconds
(读取偏好)选项。
行为
Mongo.setReadPref()
有以下行为。
与 db.runCommand() 的交互
从 mongosh 2.0 开始,db.runCommand()
会忽略通过连接字符串或使用 Mongo.setReadPref()
方法添加的任何全局读取偏好。要指定所需的读取偏好,在调用 db.runCommand()
时使用 options
参数。
举例
指定读取偏好(read preference)模式
以下操作将读取偏好模式设置为针对从节点成员进行读取。这隐式允许从辅助节点读取。
db.getMongo().setReadPref('secondary')
但是,如果在使用 mongosh
连接到主节点时调用,则上述命令不会将查询路由到从节点。
指定读取偏好标签集
要使用特定标签定位从节点,请同时包含模式和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 将使用任何符合条件的从节点。
有关详细信息,请参阅标签匹配顺序。
提示
另请参阅:
指定对冲读
对于分片集群,您可以为非主节点 读取偏好(read preference) 启用 对冲读 。要使用对冲读, 必须具有用于对冲读的mongos
enabled support
(默认),并且非primary
读取偏好(read preference) 必须启用对冲读。
要使用对冲读来定位分片集群上的从节点,请同时包含模式和对冲选项,如以下示例所示:
没有标签集
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 )