Docs HomeMongoDB Manual

Mongo.setReadPref()

On this page本页内容

Definition定义

Mongo.setReadPref(mode, tagSet, hedgeOptions)

Call the setReadPref() method on a Mongo connection object to control how the client will route all queries to members of the replica set. 在Mongo连接对象上调用setReadPref()方法,以控制客户端如何将所有查询路由到副本集的成员。[1]

Note

You must call Mongo.setReadPref() on the connection object before retrieving documents using that connection to use that read preference.在使用该连接检索文档以使用该读取首选项之前,必须对连接对象调用Mongo.setReadPref()

[1] To apply a read preference for a specific query or queries, you can apply cursor.readPref() to a cursor before iteration. 要将读取首选项应用于一个或多个特定查询,可以在迭代前将cursor.readPref()应用于游标。See cursor.readPref() for details.有关详细信息,请参阅cursor.readPref()

Parameters参数

Parameter参数Type类型Description描述
modestringOne of the following read preference modes: primary, primaryPreferred, secondary, secondaryPreferred, or nearest 以下读取首选项模式之一:primaryprimaryPreferredsecondarysecondaryPreferrednearest
tagSetarray of documentsOptional.可选的。A tag set used to target reads to members with the specified tag(s). 一个标记集,用于将读取目标指向具有指定标记的成员。tagSet is not available if using read preference mode primary.如果使用读取首选项模式primary,则tagSet不可用。
For details, see Read Preference Tag Set Lists. 有关详细信息,请参阅读取首选项标记集列表
hedgeOptionsdocumentOptional.可选的。A document that specifies whether to enable the use of hedged reads:指定是否启用对冲读取的文件:
{ enabled: <boolean> }
The enabled field defaults to true; i.e. specifying an empty document { } is equivalent to specifying { enabled: true }.enabled字段默认为true;即,指定一个空文档{ }相当于指定{ enabled: true }
Hedged reads are available starting in MongoDB 4.4 for sharded clusters. 从MongoDB 4.4开始,可以为分片集群提供对冲读取。To use hedged reads, the mongos must have enabled support for hedged reads (the default) and the non-primary read preferences must enable the use of hedged reads.要使用对冲读取,mongos必须启用对对冲读取的支持(默认),并且非primary 读取偏好必须启用对冲读取。
Read preference nearest enables the use of hedged reads on sharded clusters by default; i.e. by default, has { enabled: true }. 默认情况下,读取偏好nearest允许在分片集群上使用对冲读取;即默认情况下,具有{ enabled: true }
New in version 4.4. 4.4版新增。

Mongo.setReadPref() does not support the Read Preference maxStalenessSeconds option for read preference.不支持读取首选项的读取首选项maxStalenessSeconds选项

Examples实例

Specify Read Preference Mode指定读取首选项模式

The following operation sets the read preference mode to target the read to a secondary member. 以下操作将读取首选项mode设置为将读取目标设置为次要成员。This implicitly allows reads from secondaries.这隐式地允许从辅助设备读取。

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

However, if called while connected to the primary using the mongo shell, the above command does not route queries to a secondary.但是,如果在使用mongoshell连接到主服务器时调用,则上述命令不会将查询路由到辅助服务器。

Specify Read Preference Tag Set指定读取首选项标记集

To target secondaries with specific tags, include both the mode and the tagSet array:要以具有特定标记的辅助设备为目标,请同时包含modetagSet数组:

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如果找不到,则使用空文档匹配所有符合条件的成员
]
)

During the secondary selection process, MongoDB tries to find secondary members with the datacenter: "B" tag first.在二级选择过程中,MongoDB会尝试首先查找带有datacenter: "B"标记的二级成员。

  • If found, MongoDB limits the eligible secondaries to those with the datacenter: "B" tag and ignores the remaining tags.如果找到,MongoDB会将符合条件的辅助设备限制为具有datacenter: "B"标记的辅助设备,并忽略其余标记。
  • If none are found, then, MongoDB tries to find secondary members with the "region": "West" tag.如果没有找到,那么MongoDB会尝试找到带有"region": "West"标签的secondary成员。

    • If found, MongoDB limits the eligible secondaries to those with the "region": "West" tag.如果找到,MongoDB将符合条件的secondary存储限制为带有"region": "West"标记的secondary。
    • If none are found, MongoDB uses any eligible secondaries.如果没有找到,MongoDB将使用任何符合条件的辅助设备。

See Order of Tag Matching for details.有关详细信息,请参阅标记匹配顺序

Specify Hedged Read指定对冲读取

Starting in MongoDB 4.4 for sharded clusters, you can enable hedged reads for non-primary read preferences. 从MongoDB 4.4中针对分片集群开始,您可以为非primary读取偏好启用对冲读取To use hedged reads, the mongos must have enabled support for hedged reads (the default) and the non-primary read preferences must enable the use of hedged reads.要使用对冲读取,mongos必须启用对对冲读取的支持(默认),并且非primary 读取偏好必须启用套期保值读取。

To target secondaries on 4.4+ sharded cluster using hedged reads, include both the mode and the hedgeOptions, as in the following examples:要使用对冲读取在4.4+分片集群上瞄准次级,请同时包括modehedgeOptions,如以下示例所示:

  • Without a tag set没有标记集

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

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