参考 > 复写 > 复制集读取和写入语义 > 阅读偏好 > 标签集
在本页面
如果一个或多个副本集成员与关联
tags
,则可以在读取首选项中指定一个标记集(标记规范文档的数组)以定位这些成员。
要使用标签配置成员,请设置members[n].tags
为包含标签名称和值对的文档。标签的值必须是字符串。
然后,您可以在读取首选项中包含一个标记集,以定位标记的成员。标签集是标签规范文档的数组,其中每个标签规范文档都包含一个或多个标签/值对。
为了查找副本集成员,MongoDB会连续尝试每个文档,直到找到匹配项。有关详细信息,请参见标签匹配顺序。
例如,如果辅助成员具有以下内容
members[n].tags
:
然后,以下标记集可以将读取操作定向到上述辅助节点(或具有相同标记的其他成员):
如果标记集列出了多个文档,则MongoDB会连续尝试每个文档,直到找到匹配项为止。找到匹配项后,该标签说明文档将用于查找所有合格的匹配成员,而其余标签说明文档将被忽略。如果没有成员与任何标签规范文档匹配,则读取操作返回错误。
小费
为了避免在没有成员符合任何标签规范的情况下出错,您可以添加一个空文档作为标签集的最后一个元素,以从任何符合条件的成员中读取。{ }
例如,考虑以下带有三个标签规范文档的标签集:
首先,MongoDB尝试查找标记为和的成员。"region":
"South"
"datacenter": "A"
如果找到成员,则不会考虑其余的标签规范文档。相反,MongoDB使用此标签规范文档来查找所有符合条件的成员。
另外,MongoDB尝试查找具有第二个文档中指定的标签的成员
如果发现某个成员已被标记,则不考虑其余的标记规范文档。相反,MongoDB使用此标签规范文档来查找所有符合条件的成员。
否则,考虑第三份文件。
空文档匹配任何符合条件的成员。
标签与mode不兼容primary
,并且通常仅在选择集合
的次要成员进行读取操作时适用。但是,
nearest
读取模式与标签集组合时,将选择具有最低网络延迟的匹配成员。该成员可以是主要成员或次要成员。
模式 | 笔记 |
---|---|
primaryPreferred |
指定的标签集仅在选择符合条件的次级标签时适用。 |
secondary |
指定的标记集始终适用。 |
secondaryPreferred |
指定的标签集仅在选择符合条件的次级标签时适用。 |
nearest |
指定标签集适用于选择主要还是合格的次要对象。 |
有关模式和标签集之间的交互的信息,请参阅 特定的读取首选项模式文档。
有关配置标记集的信息,请参见“ 配置副本集标记集”教程。