“文档” 菜单
文档首页
/
MongoDB 阿特拉斯
/ / / /

如何对对象和文档数组中的字段进行索引

在此页面上

  • 查看 embeddedDocuments 类型限制
  • embeddedDocument 类型定义索引
  • 配置 embeddedDocument 字段属性
  • embeddedDocument 类型使用示例

注意

Atlas Search embeddedDocuments索引选项、 embeddedDocument操作符和 embedded评分选项均处于预览状态。当副本集或单个 MongoDB 分片上的 Atlas Search 索引达到 Lucene 的 20 亿个文档限制时,Atlas Search 不会为该索引的新文档编制索引或对现有文档进行更新。当此功能正式可用时,将制定适应此限制的解决方案。要解决与使用此功能相关的任何问题,请联系支持部门。

您可以使用 Atlas Search embeddedDocuments 类型来对文档中的字段和作为数组元素的对象编制索引。Atlas Search 可为嵌入式文档编制独立于其父文档的索引。每个索引文档只包含嵌入式文档数组元素的字段。您只能使用 EmbeddedDocument 操作符来查询索引为 embeddedDocuments 类型的字段。

Atlas Search 不会动态地对 embeddedDocument 类型的字段进行索引。您必须 使用静态映射embeddedDocument 字段进行索引。您可以使用 Atlas 用户界面中的可视化编辑器JSON 编辑器embeddedDocument类型的字段进行索引。

注意

Atlas Search 不支持对超过 20 亿个的索引对象建立索引,其中每个索引的嵌入式文档都算作一个对象。使用 embeddedDocuments 字段类型,可能导致索引对象超过此限制,进而造成索引转换为失败状态。如果集合包含可能产生 20 亿个对象的大型数组,则必须对任何包含 embeddedDocuments 类型索引的集群进行分片

适用以下限制:

  • 您只能在嵌套级别最多为 5 个的字段上使用 embeddedDocuments。一个 embeddedDocuments 字段不能具有超过 4embeddedDocuments 父字段。

  • 您不能将 embeddedDocuments 用于 datenumeric 分面。

  • 您不能将 embeddedDocuments 类型内部的字段定义为 knnVector 类型。

  • 您无法将索引为 embeddedDocuments 类型的字段的子字段作为词元类型进行索引。

  • 突出显示嵌入式文档中的字段,您还必须对要作为 document 类型突出显示的字段的父字段进行索引。

  • 仅当将嵌入式文档子字段的父项索引为文档类型时,才能执行以下操作:

    • 对嵌入式文档中的字符串字段进行分面搜索。您还必须将要分面的字段索引为stringFacet类型。

      注意

      当您在嵌入式文档中对字符串字段进行分面时,Atlas Search 只返回与父文档数量匹配的分面计数。

      您无法对嵌入式文档中的数字和日期字段进行分面。

    • 突出显示嵌入式文档中的字段。有关示例,请参阅如何对数组中的对象运行 Atlas Search 查询教程。

    • 嵌入式文档字段的父项排序。您还必须使用字符串值作为元类型对嵌入式文档字段进行索引。对于具有数字和日期值的子字段,启用动态映射以自动为这些字段编制索引。有关示例,请参阅排序示例。

要定义 embeddedDocument 类型的索引,请在 Atlas UI 中选择您的首选配置方法,然后选择数据库和集合。

  1. 单击 Refine Your Index配置索引。

  2. Field Mappings 部分中,单击 Add Field 打开 Add Field Mapping 窗口。

  3. Field Name 下拉菜单中选择要索引的字段。

    注意

    您无法对字段名称开头包含美元 ($) 符号的字段创建索引。

  4. 单击 Data Type(添加数据)下拉列表并选择 EmbeddedDocument(插入文档)。

  5. 切换 Enable Dynamic Mapping 设置以启用或禁用文档中所有动态可索引字段的动态索引。要了解更多信息,请参阅配置 document 字段属性

  6. 单击 Add(连接)。

  7. 如果禁用了动态映射,请单击 EmbeddedDocument 类型字段的 Add Embedded Field,以定义文档中字段的字段映射。

以下是embeddedDocument类型的 JSON语法。将默认索引定义替换为以下内容。要了解有关字段的更多信息,请参阅字段属性

1{
2 "mappings": {
3 "dynamic": true|false,
4 "fields": {
5 "<field-name>": {
6 "type": "embeddedDocuments",
7 "dynamic": true|false,
8 "fields": {
9 "<field-name>": {
10 <field-mapping-definition>
11 }
12 }
13 }
14 }
15 }
16}

Atlas Search embeddedDocuments 类型采用以下参数:

字段
类型
必要性
说明
默认
type
字符串
必需
标识字段类型的人类可读标签。值必须是 embeddedDocuments
dynamic
布尔
Optional

该标记指定是否对文档中的每个可动态索引的字段进行索引。值可以是以下值之一:

  • true — 对所有可索引字段进行索引。

  • false — 不对所有可索引字段进行索引。

false
fields
文档
Optional

要进行索引的字段。

如果 dynamictrue,则 Atlas Search 对所有可索引字段进行索引。

如果 dynamicfalse,您可以在 fields 的字段定义中指定要进行索引的字段。

注意

Atlas Search 不支持将分面字段作为 embeddedDocuments 字段的一部分进行索引。

{}

以下索引定义示例使用sample_supplies.sales集合。如果集群上已加载示例数据,则可以使用 Atlas 用户界面中的可视化编辑器或JSON编辑器来配置索引。选择首选配置方法后,选择数据库和集合,并优化索引以添加字段映射。

以下索引定义对 items 字段中的对象数组编制索引。它还将 Atlas Search 配置为自动为 items 数组中对象内的所有动态可索引字段编制索引。

  1. Add Field Mapping 窗口中,从 Field Name 下拉列表中选择 items

  2. 单击 Data Type(添加数据)下拉列表并选择 EmbeddedDocuments(插入文档)。

  3. 如果需要,请切换 Enable Dynamic Mapping 以启用动态映射。

  4. 单击 Add(连接)。

将默认索引定义替换为以下索引定义。

1{
2 "mappings": {
3 "fields": {
4 "items": {
5 "type": "embeddedDocuments",
6 "dynamic": true
7 }
8 }
9 }
10}

注意

要为嵌入式文档中的所有字段(包括 Atlas Search 未动态索引的字段)建立索引,请在索引定义中定义这些字段。对于字符串分面,Atlas Search 会对结果集中的每个文档计数一次字符串分面。

例如,以下索引定义将 Atlas Search 配置为自动为 items 数组中的对象内的所有动态可索引字段编制索引。它还将对象数组内的 purchaseMethod 字段配置为作为 stringFacet 进行索引(Atlas Search 不会动态索引该字段),以支持针对该字段的 Atlas Search 分面查询:

单击 Field Mappings 部分的 Add Field,并在 Add Field Mapping 窗口配置各字段的设置后,单击 Add 添加以下字段。

Field Name
Data Type
items
单击下拉菜单并选择 EmbeddedDocuments
purchaseMethod
单击下拉菜单并选择 StringFacet
1{
2 "mappings": {
3 "dynamic": true,
4 "fields": {
5 "items": {
6 "dynamic": true,
7 "type": "embeddedDocuments"
8 },
9 "purchaseMethod": {
10 "type": "stringFacet"
11 }
12 }
13 }
14}

以下索引定义将 Atlas Search 配置为仅索引items对象数组中作为 Atlas Search string类型的nametags字段。

  1. Add Field Mapping 窗口中,从 Field Name 下拉列表中选择 items

  2. 单击 Data Type(添加数据)下拉列表并选择 EmbeddedDocuments(插入文档)。

  3. 禁用Enable Dynamic Mapping

  4. 单击 Add(连接)。

  5. Add Embedded FielditemsField MappingsAdd单击 表中 字段的Add Embedded Field Mapping ,在 窗口中配置每个字段的设置后,单击 添加以下字段。

    Field Name
    Data Type
    items.name
    单击 Data Type(添加数据)下拉列表并选择 String(插入文档)。
    items.tags
    单击 Data Type(添加数据)下拉列表并选择 String(插入文档)。

将默认索引定义替换为以下索引定义。

1{
2 "mappings": {
3 "fields": {
4 "items": {
5 "type": "embeddedDocuments",
6 "dynamic": false,
7 "fields": {
8 "name": {
9 "type": "string"
10 },
11 "tags": {
12 "type": "string"
13 }
14 }
15 }
16 }
17 }
18}

提示

另请参阅:其他索引定义示例

后退

文档

来年

地理